工厂模式(三)
定义:定义一个创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
- 抽象产品类
- 具体产品类
- 抽象工厂类
1.抽象工厂类
public abstract class Computerfactorys {
public abstract <T extends Computer> T createComputer(Class<T> clz);
}
2.具体工厂类
public class GDComputerfactory extends Computerfactorys {
@Override
public <T extends Computer> T createComputer(Class<T> clz) {
Computer computer = null;
String classname = clz.getName();
try {
//通过反射来生产不同厂家的电脑
computer = (Computer) Class.forName(classname).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) computer;
}
}
3.抽象产品类与具体产品类
这两个类与简单工厂模式是一样的。
4.简单的使用
public class Client {
public static void main(String[] args) {
Computerfactorys computerfactory = new GDComputerfactory();
LenovoComputer lenovoComputer = computerfactory.createComputer(LenovoComputer.class);
lenovoComputer.start();
}
}
总结
- 简单工厂模式:在工厂类包含了必要的逻辑判断,根据不同的条件来动态实例化相关的类。这去除了与具体产品的依赖;但与此同时也会带来一个问题;如果我们需要新增加一个产品时,就需要在工厂类中添加一个case判断,进行实例该类,这违背的开放封闭的原则,对修改也开放了。工厂模式就没有违背该原则。并不需要修改工厂类,直接创建产品即可。