赞
踩
Android的设计模式系列文章介绍,欢迎关注,持续更新中:
Android的设计模式-设计模式的六大原则
创建型模式:
Android的设计模式-单例模式
Android的设计模式-建造者模式
Android的设计模式-工厂方法模式
Android的设计模式-简单工厂模式
Android的设计模式-抽象工厂模式
Android的设计模式-原型模式
行为型模式:
Android的设计模式-策略模式
Android的设计模式-状态模式
Android的设计模式-责任链模式
Android的设计模式-观察者模式
定义一个用于创建对象的接口,让子类决定实例化哪个类。
4.1 创建抽象产品类,定义公共接口:
//抽象产品类
public abstract class Product {
public abstract void show();
}
4.2 创建具体产品类,继承Product类:
//具体产品类A
public class ProductA extends Product {
@Override
public void show() {
System.out.println("product A");
}
}
//具体产品类B
public class ProductB extends Product {
@Override
public void show() {
System.out.println("product B");
}
}
4.3 创建工厂类,创建具体的产品:
public class Factory { public static Product create(String productName) { Product product = null; //通过switch语句控制生产哪种商品 switch (productName) { case "A": product = new ProductA(); break; case "B": product = new ProductB(); break; } return product; } }
4.4 测试方法:
public void test() {
Factory.create("A").show();//生产ProductA
Factory.create("B").show();//生产ProductB
try {
Factory.create("C").show();//生产ProductC
} catch (NullPointerException e) {
System.out.println("没有ProductC");//没有ProductC,会报错
}
}
由于简单工厂模式新增产品时需要直接修改工厂类,违反了开放封闭原则。因此可以使用反射来创建实例对象,确保能够遵循开放封闭原则。
9.1 反射实现工厂类
public class Factory {
public static <T extends Product> T create(Class<T> clz) {
Product product = null;
try {
product = (Product) Class.forName(clz.getName()).newInstance();//反射出实例
} catch (Exception e) {
e.printStackTrace();
}
return (T) product;
}
}
9.2 测试方法
public void test() {
Factory.create(ProductA.class).show();//生产ProductA
Factory.create(ProductB.class).show();//生产ProductB
}
9.3 总结
使用反射来实现工厂类,新增产品时无需修改工厂类,但是使用反射来创建实例对象的话会比正常使用new来创建的要慢。
相关文章阅读
Android的设计模式-设计模式的六大原则
创建型模式:
Android的设计模式-单例模式
Android的设计模式-建造者模式
Android的设计模式-工厂方法模式
Android的设计模式-简单工厂模式
Android的设计模式-抽象工厂模式
Android的设计模式-原型模式
行为型模式:
Android的设计模式-策略模式
Android的设计模式-状态模式
Android的设计模式-责任链模式
Android的设计模式-观察者模式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。