《设计模式》之工厂方法模式

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推辞到子类。


《设计模式》之工厂方法模式


类型:

创建型


适用场景:

创建对象需要大量重复的代码

一个类通过其子类来指定要创建的对象


优点:

加入新产品不需要修改代码,提高了可扩展性

客户无需关注细节,只需关心所对应产品工厂


缺点:

类的个数容易过多增加复杂度

增加系统抽象与理解难度

添加产品时,还需要添加具体的工厂类


代码实现

首先要生产的产品类

如生产手机,定义各个手机厂商的手机产品类即可

首先定义一个手机接口Phone.java(目的是对各个手机产品形成规范,对外提供统一的接口)

<code>interface Phone {
public void produce();
}/<code>


定义具体产品并实现Phone接口

HuaweiPhone.java 华为手机

<code>public class HuaweiPhone implements Phone {
@Override public void produce() {
System.out.println("生产华为手机");
}
}/<code>


Iphone.java

苹果手机

<code>public class Iphone implements Phone{
@Override public void produce() {
System.out.println("produce iphone");
}
}/<code>


定义PhoneFactory.java 产品工厂


<code>public abstract class PhoneFactory {
public abstract Phone makePhone();
}/<code>


将创建对象延迟到子类

HuaweiPhoneFactory.java 华为手机工厂

<code>public class HuaweiPhoneFactory extends PhoneFactory{
@Override public Phone makePhone() {
return new HuaweiPhone(); }
}/<code>


IPhoneFactory.java 苹果手机工厂

<code>class IPhoneFactory extends PhoneFactory{
@Override public Phone makePhone() {
return new Iphone(); }
}/<code>


客户端调用

<code>public class Client {
public static void main(String[] args) {
PhoneFactory phone =new HuaweiPhoneFactory();
phone.makePhone().produce();
}
}/<code>

可以看到客户端调用时只需要调用具体的工厂即可,修改时改变工厂即可。我们只需要关心具体的工厂而不需要关心其内部实现。同时也符合了开闭原则(不修改工厂内部的源码实现)。


UML类图

《设计模式》之工厂方法模式


分享到:


相關文章: