今天我来全面总结一下Android开发中最常用的设计模式 - 简单工厂模式。
其他设计模式介绍1分钟全面了解“设计模式”单例模式(Singleton) - 最易懂的设计模式解析简单工厂模式(SimpleFactoryPattern)- 最易懂的设计模式解析工厂方法模式(Factory Method)- 最易懂的设计模式解析抽象工厂模式(Abstract Factory)- 最易懂的设计模式解析策略模式(Strategy Pattern)- 最易懂的设计模式解析适配器模式(Adapter Pattern)- 最易懂的设计模式解析代理模式(Proxy Pattern)- 最易懂的设计模式解析模板方法模式(Template Method) - 最易懂的设计模式解析建造者模式(Builder Pattern)- 最易懂的设计模式解析外观模式(Facade Pattern) - 最易懂的设计模式解析
将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。
即使用者可直接消费产品而不需要知道其生产的细节
接下来我用一个实例来对简单工厂模式进行更深一步的介绍。
实现代码如下:
步骤1. 创建抽象产品类,定义具体产品的公共接口
abstract class Product{ public abstract void Show(); }步骤2. 创建具体产品类(继承抽象产品类),定义生产的具体产品
//具体产品类A class ProductA extends Product{ @Override public void Show() { System.out.println("生产出了产品A"); } } //具体产品类B class ProductB extends Product{ @Override public void Show() { System.out.println("生产出了产品C"); } } //具体产品类C class ProductC extends Product{ @Override public void Show() { System.out.println("生产出了产品C"); } }步骤3. 创建工厂类,通过创建静态方法从而根据传入不同参数创建不同具体产品类的实例
class Factory { public static Product Manufacture(String ProductName){ //工厂类里用switch语句控制生产哪种商品; //使用者只需要调用工厂类的静态方法就可以实现产品类的实例化。 switch (ProductName){ case "A": return new ProductA(); case "B": return new ProductB(); case "C": return new ProductC(); default: return null; } } }步骤4. 外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例
//工厂产品生产流程 public class SimpleFactoryPattern { public static void main(String[] args){ Factory mFactory = new Factory(); //客户要产品A try { //调用工厂类的静态方法 & 传入不同参数从而创建产品实例 mFactory.Manufacture("A").Show(); }catch (NullPointerException e){ System.out.println("没有这一类产品"); } //客户要产品B try { mFactory.Manufacture("B").Show(); }catch (NullPointerException e){ System.out.println("没有这一类产品"); } //客户要产品C try { mFactory.Manufacture("C").Show(); }catch (NullPointerException e){ System.out.println("没有这一类产品"); } //客户要产品D try { mFactory.Manufacture("D").Show(); }catch (NullPointerException e){ System.out.println("没有这一类产品"); } } }在了解了优缺点后,我们知道了简单工厂模式的应用场景:
客户如果只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时;当工厂类负责创建的对象(具体产品)比较少时。