今天我来全面总结一下Android开发中最常用的设计模式 - 简单工厂模式。
关于设计模式的介绍,可以看下我之前写的:1分钟全面了解“设计模式”
将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。
即使用者可直接消费产品而不需要知道其生产的细节
接下来我用一个实例来对简单工厂模式进行更深一步的介绍。
实现代码如下:
步骤1. 创建抽象产品类,定义具体产品的公共接口
abstract class Product{ public abstract void Show(); } 123 123步骤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"); } } 123456789101112131415161718192021222324252627 123456789101112131415161718192021222324252627步骤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; } } } 123456789101112131415161718192021 123456789101112131415161718192021步骤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("没有这一类产品"); } } } 123456789101112131415161718192021222324252627282930313233343536 123456789101112131415161718192021222324252627282930313233343536在了解了优缺点后,我们知道了简单工厂模式的应用场景:
客户如果只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时;当工厂类负责创建的对象(具体产品)比较少时。