Tuesday, January 5, 2021

Factory Pattern

应用场景

  • 生成复杂对象时,无需知道具体类名,只需知道相应的工厂方法即可。

优点

  • 符合开放封闭原则。新增产品时,只需增加相应的具体产品类和相应的工厂子类即可。
  • 符合单一职责原则。每个具体工厂类只负责创建对应的产品。

缺点

  • 一个具体工厂只能创建一种具体产品。
  • 增加新产品时,还需增加相应的工厂类,系统类的个数将成对增加,增加了系统的复杂度和性能开销。
  • 引入的抽象类也会导致类结构的复杂化。

=========================================================

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

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能