1.为什么需要工厂:(Factory Method Pattern)
工厂能把处理创建对象的细节封装,调用实现某接口的对象的模块就变成了此的对象的客户,他无需知道具体生成怎样的对象,只需调用对象的方法即可。这样就把需要改变的部分抽象出来。
同时,工厂能为很多相似的客户服务。
2.“元老工厂”——简单工厂
简单工厂不能算是真正意义模式,但是使用很频繁。
3.第一种工厂:
工厂方法用来处理对象的创建,并将这样的行为封装在子类中。这样,客户程序中关于超类的代码就和子类对象创建代码解耦了。
abstract Product factoryMethod(String type)
a.工厂方法是抽象的,所以依赖子类来处理对象的创建。
b.工厂方法必须返回一个产品。
c.工厂方法把实际代码与客户代码分割开来。
定义工厂方法模式:
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
工厂方法模式能够封装具体类型的实例化。
工厂方法模式把简单工厂抽象到creator接口里面。
工厂方法模式也经常使用无参方法,只产生一种产品。
4.第二种工厂:
抽象工厂这个模式可以创建产品的家族。
定义抽象工厂方式:
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
5.抽象工厂与工厂方法的不同:
抽象工厂与工厂方法都是负责创建对象。
工厂方法用的是继承:工厂方法的继承,意味着利用工厂方法创建对象,需要扩展一个类,并通过子类覆盖它的工厂方法,达到创建对象的目的。用这种做法,客户只需要知道他们所使用的抽象类型就可以了,而由子类负责决定具体类型。换句话说,它只负责将客户从具体类型中解耦。
抽象工厂用的是对象的组合:它提供一个用来创建一个产品家族的抽象类型,这个类型的子类定义了产品被产生的方法。要想使用这个工厂,必须先实例化它,然后将它传入一些针对抽象类型所写的代码中。它也可以将客户从所使用的实际具体产品中解耦。另一个优点是可以把一群相关的产品集合起来。但是缺点就是加入新产品就必须改变接口。
特别的:静态工厂不需要创建对象来实例化对象,但它不能通过继承来改变创建方法的行为。