使用工厂前如下图:
在使用静态工厂之前我们创造对象都需要自己使用new
关键字进行创建,而使用工厂之后便不需要自己进行创建,直接在工厂中取出成品便可以直接使用,不需要关心创造细节;
例如:我想买一台电脑,在没有工厂的时候我只能自己做,需要什么样的CPU、什么样的内存等等,这些都需要我们自己去配置;而在有了工厂之后便不需要这么麻烦了,我想买电脑,直接去工厂里买就可以,不需要关心是怎么样配置的,只要拿过来就可以直接使用了。
对于消费者来说,可以看到的只有电脑工厂,具体的生产细节对消费者透明
这个工厂看似很好,但是却有一个问题。那就是在添加品牌的时候,必须改动工厂方法,这样就破坏了开闭原则
,这时就需要一种方法来解决这件事情
方法工厂就是在静态工厂的基础上,建立了一个方法工厂;使得每一个类都有一个工厂,在添加类时不会破坏开闭原则
添加新的类时不会影响原有类
代码如下
电脑类:
/*电脑的接口类*/
public interface Computer {
public String getComputer();
}
电脑类及其工厂
/*戴尔的电脑*/
public class DellComputer implements Computer{
@Override
public String getComputer() {
return "Dell";
}
}
/*戴尔的工厂*/
public class DellComputerFactory implements ComputerFactory{
@Override
public Computer getComputer() {
return new DellComputer();
}
}
/*联想的电脑*/
public class LenovoComputer implements Computer{
@Override
public String getComputer() {
return "Lenovo";
}
}
/*联想的工厂*/
public class LenovoComputerFactory implements ComputerFactory {
@Override
public Computer getComputer() {
return new LenovoComputer();
}
}
测试类
public static void main(String[] args) {
Computer computer1 = new DellComputerFactory().getComputer();
Computer computer2 = new LenovoComputerFactory().getComputer();
System.out.println(computer1.getName());
System.out.println(computer2.getName());
}