设计模式之工厂模式
议论:
除了直接new对象以外有什么好的创建对象方法吗?
如果有许多类有统一的接口,我们如果想要使用这些类创建一些对象,除了直接new还可以怎么办呢?
我们可以根据不同的参数创建不同的对象:
如:if(a){创建a1,}if(b){创建a2}......
但是思考如果这段代码加在接口中,那么如果有新的子类就要更改这部分if......,违反了对扩展开放对修改关闭的原则。
1 简单工厂模式
将创建对象的代码(变化的部分),抽象出来成为一个类A,其他用户在创建对象或者对象族的时候,需要在自己类内构造一个A.
简单工厂模式用一个类实现对象创建方法的封装,然后使用者只需在自己的构造函数中或者类中添加对其引用即可。
2、工厂模式:定义了一个创建对象的接口,但由子类决定要实例化的是哪一个类。工厂方法让类把实例化推迟到子类中。(工厂模式主要是封装了对象的创建,工厂方法在接口中声明,返回值为对象类型接口,必须为抽象类型以便要求子类实现)
abstract Product factorymethod(String type);(工厂接口中的工厂方法)
理解:可以理为声明了一个工厂接口,里面包含一个生产对象的抽象方法,那么每一个子类都有自己的实现,也就是自己生产对象的方法,因此每一个子类都可以理解为是一个简单工厂,这样类的实现和创建完全解耦,类实现的改变不会影响类的创建。