应用场景
- 生成复杂对象时,无需知道具体类名,只需知道相应的工厂方法即可。
优点
- 符合开放封闭原则。新增产品时,只需增加相应的具体产品类和相应的工厂子类即可。
- 符合单一职责原则。每个具体工厂类只负责创建对应的产品。
缺点
- 一个具体工厂只能创建一种具体产品。
- 增加新产品时,还需增加相应的工厂类,系统类的个数将成对增加,增加了系统的复杂度和性能开销。
- 引入的抽象类也会导致类结构的复杂化。
=========================================================
public abstract class Product{
public abstract void method();
}
public class ConcreteProductA extends Prodect{
public void method(){
System.out.println("我是产品A!");
}
}
public class ConcreteProductB extends Prodect{
public void method(){
System.out.println("我是产品B!");
}
}
public abstract class Factory{
public abstract Product createProduct();
}
public class MyFactory extends Factory{
public Product createProduct(){
return new ConcreteProductA();
}
}
=========================================================
还可以通过传参的方式,让 MyFactory 的 createProduct 方法根据传入的参数决定是创建ConcreteProductA还是ConcreteProductB
Android example:
在 getSystemService 方法中就是用到了工厂模式,他就是根据传入的参数决定创建哪个对象,当然了,由于返回的都是以单例模式存在的对象,因此不用new了,直接把单例返回就好。
=========================================================
public Object getSystemService(String name) {
if (getBaseContext() == null) {
throw new IllegalStateException("System services not available to Activities before onCreate()");
}
if (WINDOW_SERVICE.equals(name)) {
return mWindowManager;
} else if (SEARCH_SERVICE.equals(name)) {
ensureSearchManager();
return mSearchManager;
}
return super.getSystemService(name);
}
=========================================================
Reference:
https://juejin.cn/post/6844903474639929357
No comments:
Post a Comment