Simple Factory模式

Simple Factory模式(又称Static Factory模式),又一个Simple Factory生产成品,而对客户端隐藏产品产生的细节。对象如何生成,生成前是否与其他对象建立依赖关系,客户端都不需要理会,用以将对象生成方式和客户端程序代码隔离。

实现时定义一个产品接口(interface),并透过特定的静态方法来生成产品。
假设有一个音乐盒工厂,购买音乐盒的客人不知道音乐盒是如何制作的,他只需要知道如何播放音乐盒就可以了,以UML类图来表示这个概念:
[img]/upload/attachment/89238/61a9ce67-0a14-3611-b8ae-66dc59da958a.jpg[/img]
如上图所示,MusicBoxDemo代表了客户的角色,它只依赖于IMusicBox接口,而不关心特定的实现,实际如何产生IMusicBox的实例由MusicBoxFactory完成,以一个简单的程序来实现上面这个UML类图:
IMusicBox.java
public interface IMusicBox {
public void play();
}

PianoBox.java
public class PianoBox implements IMusicBox {
public void play() {
System.out.println("播放钢琴音乐:)");
}
}

ViolinBox.java
public class ViolinBox implements IMusicBox {
public void play() {
System.out.println("播放小提琴音乐^_^");
}
}

MusicBoxFactory.java
public class MusicBoxFactory {
public static IMusicBox createMusicBox(String name)
throws InstantiationException,
IllegalAccessException,
ClassNotFoundException {
// 这里使用Java的Reflection机制来产生实例
IMusicBox box = (IMusicBox) Class.forName(name).newInstance()

// 也许你还会作一些对box属性设定之类的处理...
// ...
return box;
}
}


MusicBoxDemo.java
public class MusicBoxDemo {
public static void main(String[] args) throws Exception {
playMusicBox(MusicBoxFactory.createMusicBox("PianoBox"));
playMusicBox(MusicBoxFactory.createMusicBox("ViolinBox"));
}

public static void playMusicBox(IMusicBox musicBox) {
musicBox.play();
}
}


由于客户端只依赖于IMusicBox接口,所以即使你日后改变了createMusicBox()的实现方式(接受不同的music box),着对客户端是一点影响都没有。简单点来说当音乐盒制作方式因技术进步而改变,都不会影响客户如何操作音乐盒,因为用户只需要知道操作接口即可。

来看看Simple Factory的类结构:
[img]/upload/attachment/89240/8caf0d63-b7d7-399a-a5ad-85780f212003.jpg[/img]

客户只要面对Factory,客户依赖于产品接口,产品的具体实现时可以与客户隔离的,他们也是可以抽换的。
将Simple Factory的概念扩充,可以设计出各种物件皆通用的Factory类,作为专门生成、组装、管理对象的容器。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值