一、工厂模式
2020-04-27 本文已影响0人
RainySpring
工厂类拥有一个工厂方法(create),接受了一个参数,通过不同的参数实例化不同的产品类。
- 简单工厂模式
- 实现一:简单工厂类
public class AnimalFactory {
//简单工厂设计模式(负担太重、不符合开闭原则)
public static Animal createAnimal(String name){
if ("cat".equals(name)) {
return new Cat();
}else if ("dog".equals(name)) {
return new Dog();
}else if ("cow".equals(name)) {
return new Dog();
}else{
return null;
}
}
}
- 实现二:静态工厂模式
//该简单工厂,也称为静态方法工厂
public class AnimalFactory2 {
public static Dog createDog(){
eturn new Dog();
}
public static Cat createCat(){
return new Cat();
}
}
- 工厂方法模式
- 实现:抽象工厂类
抽象工厂是应对产品族概念的。
抽象出来的工厂对象,
// 抽象出来的动物工厂----它只负责生产一种产品
public abstract class AnimalFactory {
// 工厂方法
public abstract Animal createAnimal();
}
我们可以定义根据这个产品族里具体的产品类型去设计子类工厂,
// 具体的工厂实现类1
public class CatFactory extends AnimalFactory {
@Override
public Animal createAnimal() {
return new Cat();
}
}
// 具体的工厂实现类2
public class DogFactory extends AnimalFactory {
@Override
public Animal createAnimal() {
return new Dog();
}
}
总结,
很明显,简单工厂的特点就是“简单粗暴”,通过一个含参的工厂方法,我们可以实例化任何产品类,上至飞机火箭,下至土豆面条,无所不能。所以简单工厂有一个别名:上帝类。
任何”东西“的子类都可以被生产,负担太重。当所要生产产品种类非常多时,工厂方法的代码量可能会很庞大。在遵循开闭原则(对拓展开放,对修改关闭)的条件下,简单工厂对于增加新的产品,无能为力。因为增加新产品只能通过修改工厂方法来实现。
抽象工厂模式增加了扩展性。