`
随枫霏
  • 浏览: 134290 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

 

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对象,不同的工厂实现实例化了不同类的对象,这里就运用了工厂方法。


  • 大小: 197.8 KB
分享到:
评论

相关推荐

    Java性能调优实战——覆盖80%以上的Java应用调优场景

    开篇词讲怎样才能做好性能调优02讲如何制定性能调优策略04讲...索引的失效与优化36讲什么时候需要分表分库37讲电商系统表设计优化案例分析39讲答疑课堂:MySQL中InnoDB的知识点串讲加餐讲推荐几款常用的性能测试工具

    UML和模式应用(原书第3版).pdf

    第1章 面向对象分析和设计 1.1 本书的主要内容 1.2 最重要的学习目标 1.3 什么是分析和设计 1.4 什么是面向对象分析和设计 1.5 简短示例 1.6 什么是UML 1.7 可视建模的优点 1.8 历史 1.9 参考资料 第2章 ...

    性能测试进阶指南——LoadRunner11实战 part2

    《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:...

    人工智能办公室设计优秀案例.docx

    同时,不同层级人员可以利用自助数据可视化分析技术快速构建契合业务场景的数据应用,实现生产实时监控、OMO运营在线分析、设备故障预警、资金管理分析、端到端效能分析等不同业务模块的数据应用需求,切实提高工作...

    性能测试进阶指南——LoadRunner11实战 part1

    《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:...

    HBase企业应用开发实战

    理论维度,则深入分析了HBase、框架设计、模式设计和基本原理。可谓是理论与实践完美结合,深度与广度兼备!, 【名家推荐】, 本书作者在Hadoop开发和运维领域工作近4年,积累了丰富的经验,同时也对Hadoop技术人员在...

    UML基础、案例与应用(第三版)].施穆勒.扫描版_2分.pdf

    22.5 使用设计模式的好处 260 22.6 小结 260 22.7 常见问题解答 261 22.8 小测验和习题 261 22.8.1 小测验 261 22.8.2 习题 261 第三部分 高级应用 第23章 嵌入式系统建模 265 23.1 回到餐馆 265 23.2 发明之母 ...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part1

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part2

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part5

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part4

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part6

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    性能测试进阶指南——LoadRunner11实战_(完整)扫描版_@vs.part3

    4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups...

    Java典型模块

    29.6 知识点扩展——设计模式的基础知识 29.6.1 工厂设计模式 29.6.2 代理设计模式 29.7 小结 第30章 中国象棋游戏(GUI+游戏规则算法) 30.1 象棋游戏原理 30.1.1 象棋游戏的基本规则 30.1.2 项目结构框架分析 30.1...

    计算机专业毕业设计-微信小程序案例-ssm微信小程序的付费自习室系统-毕设源码+说明文档.rar

    这是一个关于计算机专业毕业设计的微信小程序案例——SSM(Spring、SpringMVC、MyBatis)微信小程序付费自习室系统。该系统旨在提供一个便捷、高效的自习室预约平台,以满足用户的学习需求。 一、系统特点: 1. ...

    性能测试进阶指南——LoadRunner11实战 part3

    《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:...

    《iOS6开发指南》精彩书摘

    第20章“重构MyNotes应用——iOS网络通信中的设计模式与架构设计”。通过对MyNotes应用重构,把MyNotes应用的数据由原来的本地存储变成云存储。在这个过程中我们介绍了移动网络通讯应用的分层架构设计必要性和重要性...

Global site tag (gtag.js) - Google Analytics