设计模式应用场景案例分析——工厂

 

1.工厂

1.1 定义
(1)工厂方法
     当同一个领域的多种类之间有很大关联性,需要根据不同的场景来创建不同的实例的时候,如果每次把对象直接new出来就显得太蹩脚了。
工厂可以根据不同的场景,创建出不同的实例。
书中的定义是:工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。
(2)抽象工厂
     抽象工厂模式提供了一个接口,用于创建相关对象的的家族,而不需要指定具体类。
看了几遍书中的例子,再结合网上的这篇文章,http://www.blogjava.net/sealyu/archive/2009/12/10/305454.html

得出下面的区别:
  • 工厂方法创建的对象是一种,而抽象工厂创建的对象是一组;
  • 工厂方法是抽象工厂的一个特例,抽象工厂中的每一种产品对象创建都是通过工厂方法实现的。
这个地方不是很确定,还望大家一起讨论下。


1.2 应用举例
下图是Spymemcached中的生成Operation的类图。


其中,
Operation相当于Spymemecached对请求命令操作的一个封装,图中列举出了3种常用的操作Store/Get/Delete,分别对应的接口是StoreOperation/GetOperation/DeleteOperation。
因为memcached目前支持2种数据传输协议——文本协议和二进制协议,因此对于每一种操作都有各自协议版本的实现,图中的GetOperationImpl分别在ascii包和binary包下,
OperationFactory是一个工厂接口,针对不同的命令,构造出不同的Operation,同样,它的实现类有AsciiOperationFactory和BinaryOperationFactory两个版本
MemcachedClient是这套工厂的客户端,在MemcachedClient初始化的时候,决定了和memcached server通信的协议,同样实例化了指定的OperationFactory的实现类,
之后,在执行指定的指令的时候,调用工厂相应的方法,就构造出了自己需要的Operation。

OperationFactory定义了3个方法,每个方法都生产出一种不同的对象,从这个意义上说,运用了抽象方法。
而针对每一种对象,比如说get()方法返回的GetOperation对象,不同的工厂实现实例化了不同类的对象,这里就运用了工厂方法。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值