Android编程设计模式之工厂方法模式实例详解
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,在工厂方法模式中,我们在创建对象时不会对产品类进行实例化,而是引用一个共同的接口来指向新创建的对象,本文将通过具体实例详细讲解工厂方法模式的定义、使用场景、实现步骤以及在Android源码中的应用。
一、定义
工厂方法模式定义了一个用于创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类的实例化推迟到子类,从而实现了解耦和灵活扩展。
二、使用场景
工厂方法模式适用于以下场景:
1、当一个类不知道它所需要的对象的确切类型或对象的具体实现时。
2、当一个类希望由其子类来指定创建对象时。
3、当将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化时。
三、模式的简单实现
抽象产品类
public abstract class Product { /** * 产品类的抽象方法 * 由具体的产品类去实现 */ public abstract void method(); }
具体产品类A
public class ConcreteProductA extends Product { @Override public void method() { System.out.println("我是具体的产品A"); } }
具体产品类B
public class ConcreteProductB extends Product { @Override public void method() { System.out.println("我是具体的产品B"); } }
抽象工厂类
public abstract class Factory { /** * 抽象工厂方法 * 具体由子类实现 * * @return 具体的产品对象 */ public abstract Product createProduct(); }
具体工厂类
public class ConcreteFactory extends Factory { /** * 具体工厂类 */ @Override public Product createProduct() { return new ConcreteProductA(); } }
客户类
public class Client { public static void main(String[] args) { Factory factory = new ConcreteFactory(); Product product = factory.createProduct(); product.method(); } }
运行结果:
我是具体的产品A
四、反射在工厂方法模式中的应用
有时候我们可以利用反射的方式更简洁地生产具体产品对象,此时需要在工厂方法的参数列表中传入一个Class类来决定是哪一个产品类。
public abstract class Factory { /** * 抽象工厂方法 * 具体由子类实现 * * @param clz 产品对象类类型 * @return 具体的产品对象 */ public abstract <T extends Product> T createProduct(Class<T> clz); }
对于具体的工厂类,则通过反射获取类的示例即可:
public class ConcreteFactory extends Factory { /** * 具体工厂类 */ @SuppressWarnings("unchecked") @Override public <T extends Product> T createProduct(Class<T> clz) { Product product = null; try { product = (Product) Class.forName(clz.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T)product; } }
最后在Client中的实现:
public class Client { public static void main(String[] args) { Factory factory = new ConcreteFactory(); Product product = factory.createProduct(ConcreteProductB.class); product.method(); } }
运行结果:
我是具体的产品B
这种方法比较简洁、动态,可以根据需要传入不同的类类型来创建相应的产品对象。
五、工厂方法模式的优点和缺点
优点:
解耦:客户端与具体类的实例化分离,降低了耦合度。
扩展性:新增产品类时,只需添加相应的工厂类,无需修改已有代码。
灵活性:可以通过工厂方法动态决定创建哪种类型的产品。
缺点:
增加代码量:需要为每个具体产品类创建一个对应的工厂类,增加了代码量。
复杂性:引入了新的类层次结构,可能会使系统变得更加复杂。
六、Android源码中的应用实例——Activity生命周期方法作为工厂方法
在Android开发中,Activity的各个生命周期方法可以看作是工厂方法的应用,onCreate()方法就是一个工厂方法,在其中可以构造各种View并通过setContentView()返回给framework处理等,这种设计使得Activity的创建过程更加灵活和可扩展。
工厂方法模式通过定义一个用于创建对象的接口,让子类决定实例化哪个类,实现了对象创建的解耦和灵活扩展,在实际开发中,可以根据需求选择合适的实现方式,如直接在工厂方法中指定具体产品类或通过反射动态决定,也需要注意其可能带来的代码量增加和系统复杂性提升的问题。
到此,以上就是小编对于“Android编程设计模式之工厂方法模式实例详解”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/639104.html