UML图
工厂方法模式URL图如下:
解决问题
在简单工厂模式进一步抽象而来,解决了如何实例化一个对象,也克服了简单工厂模式中违背的“开-闭原则”的缺点。
核心思想
工厂方法模式中,核心的工厂类不再提供所有产品的创建工作,而是将具体的产品交给具体的工厂类去实现。核心工厂类值负责制定具体工厂需要实现的接口即可,至于具体的工作交给子类去实现。
实际运用
假设我们有一个手机加工厂,具体的子工厂来生产Android手机和Iphone。类图如下:
根据类图可以定义客户端调用代码:
//获得制造Android手机的工厂
CreatorPhone androidFactory = new CreatorAndroidPhone();
//根据Android手机工厂制造Android机
Phone androidPhone = androidFactory.createPhone();
androidPhone.call();
优点
由于工厂方法模式中的核心是抽象的工厂类,所有的工厂类必须实现抽象工厂类的接口。当系统需要扩展添加新的产品,则只需要添加一个具体的产品对象和具体的工厂对象即可。不需要对原有工厂进行修改。也不需要修改客户端,这就符合了“开闭原则”。
缺点
使用工厂模式,客户端需要判断要实例化哪个具体的工厂。具体的实现工厂可能需要增加代码量。
Android与工厂方法模式
在Android中Activity和Service等核心组建中,都定义了onCreate()方法,例如当我们要显示用户界面的时候,一般都会在onCreate()中使用setContentView()方法,这个方法是在Activity中定义的,在编写具体的Activity时有继承者实现。