工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
工厂模式是JAVA中最常用的设计模式之一,属于创建型模式。
介绍
需求:封装创建逻辑。主要针对于复杂对象的初始化。(个人认为是对复杂对象初始化逻辑进行抽取)
关键代码:创建一个工厂类,封装一个函数并返回实例(Factory::getInstance)。
实现类型
class A {}
class B extends A {}
class C extends A {}
1 简单工厂:
public class Factory {
public [static] A getInstance() {return new A();}
public [static] B getInstance() {return new B();}
}
2 复杂工厂:
public class Factory {
public [static] A getInstance(String code) {
switch (code) {
case "A":
return new A();
break;
case "B":
return new B();
break;
case "C":
return new C();
break;
default:
}
}
}
3 抽象简单工厂:本质与1 简单工厂无差别,主要是强调返回实例向上造型
public Factory {
public [static] A getInstance() {return new A()};
public [static] A getInstance() {return new B()}; // B 向上造型为 A
}
4 抽象复杂工厂:
public abstract class Factory {
public abstract A getInstance();
}
public class BFactory extends Factory {
public A getInstance() { return new B(); }
}
public class CFactory extends Factory {
public A getInstance() { return new C(); }
}
以上分类,本质是以待生产的实例[例中A、B、C]是否需要向上造型来区分是否为抽象工厂。
假设需要添加 public class D extends A {} 时,以上四种类型是如何实现扩展的?
1【简单工厂】 添加新的方法,违背开闭原则,扩展性差。
2【复杂工厂】添加 “D” 判断,违背开闭原则,扩展性差。
3【抽象简单工厂】 同 1【简单工厂】,扩展性差。
4【抽象复杂工厂】实现 DFactory即可,并且 DFactory 与 原两个工厂类都可以向上造型为Factory,扩展性好。
以上为个人理解,理解错误之处请帮忙指正,多谢!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。