摘要: 装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或者排气扇。在购买开关时,我们并不知道它将来到底用于控制什么电器,也就是说,开关与电灯、排气扇并无直接关系,一个开关在安装之后可能用来控制电灯,也可能用来控制排气扇或者其他电器设备。开关与电器之间通过电线... 阅读全文
posted @ 2013-11-11 22:04 Wishmeluck 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 4 方案的改进 Sunny软件公司开发人员发现在创建具体Chart对象时,每更换一个Chart对象都需要修改客户端代码中静态工厂方法的参数,客户端代码将要重新编译,这对于客户端而言,违反了“开闭原则”,有没有一种方法能够在不修改客户端代码的前提下更换具体产品对象呢?答案是肯定的,下面... 阅读全文
posted @ 2013-11-11 20:25 Wishmeluck 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 3 完整解决方案 为了将Chart类的职责分离,同时将Chart对象的创建和使用分离,Sunny软件公司开发人员决定使用简单工厂模式对图表库进行重构,重构后的结构如图2所示:图2 图表库结构图 在图2中,Chart接口充当抽象产品类,其子类HistogramChart、Pi... 阅读全文
posted @ 2013-11-11 20:06 Wishmeluck 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 2 简单工厂模式概述 简单工厂模式并不属于GoF23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下: 首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进... 阅读全文
posted @ 2013-11-11 20:05 Wishmeluck 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式。本章将要学习的简单工厂模式是工厂方法模式的“小弟”,它不属于GoF23种设计模式,但在软件开发中应用也较为频繁,通常将它作为学习其他工厂模式的入门。此外,工厂方法模式还有一位“大哥”——... 阅读全文
posted @ 2013-11-11 20:04 Wishmeluck 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 5 “开闭原则”的倾斜性 Sunny公司使用抽象工厂模式设计了界面皮肤库,该皮肤库可以较为方便地增加新的皮肤,但是现在遇到一个非常严重的问题:由于设计时考虑不全面,忘记为单选按钮(RadioButton)提供不同皮肤的风格化显示,导致无论选择哪种皮肤,单选按钮都显得那么“格格不入”。... 阅读全文
posted @ 2013-11-11 20:00 Wishmeluck 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 4 完整解决方案 Sunny公司开发人员使用抽象工厂模式来重构界面皮肤库的设计,其基本结构如图6所示:图6界面皮肤库结构图 在图6中,SkinFactory接口充当抽象工厂,其子类SpringSkinFactory和SummerSkinFactory充当具体工厂,接口But... 阅读全文
posted @ 2013-11-11 19:59 Wishmeluck 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 3 抽象工厂模式概述 抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下: 抽象工厂模式(Abstract FactoryPattern):提供一个创建一系列相关或相互依赖对... 阅读全文
posted @ 2013-11-11 19:58 Wishmeluck 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 2 产品等级结构与产品族 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性,一般情况下,一个具体工厂中只有一个或者一组重载的工厂方法。但是有时候我们希望一个工厂可以提供多个产品对象,而不是单一的产品对象,如一个电器工厂,它可以生产电视机、... 阅读全文
posted @ 2013-11-11 19:58 Wishmeluck 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是我们本文将要学习的抽象工厂模式的... 阅读全文
posted @ 2013-11-11 19:56 Wishmeluck 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 5 重载的工厂方法 Sunny公司开发人员通过进一步分析,发现可以通过多种方式来初始化日志记录器,例如可以为各种日志记录器提供默认实现;还可以为数据库日志记录器提供数据库连接字符串,为文件日志记录器提供文件路径;也可以将参数封装在一个Object类型的对象中,通过Object对象将配... 阅读全文
posted @ 2013-11-11 15:28 Wishmeluck 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 3 完整解决方案 Sunny公司开发人员决定使用工厂方法模式来设计日志记录器,其基本结构如图3所示:图3日志记录器结构图 在图3中,Logger接口充当抽象产品,其子类FileLogger和DatabaseLogger充当具体产品,LoggerFactory接口充当抽象工... 阅读全文
posted @ 2013-11-11 15:25 Wishmeluck 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 2工厂方法模式概述 在简单工厂模式中只提供一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它需要知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,需要在其中加入必要的业务逻辑,这违背了“开闭原则”。此... 阅读全文
posted @ 2013-11-11 15:23 Wishmeluck 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 原文:http://blog.csdn.net/lovelion/article/details/8258121简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,如何实现... 阅读全文
posted @ 2013-11-11 15:17 Wishmeluck 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 4. 抽象外观类 在标准的外观模式结构图中,如果需要增加、删除或更换与外观类交互的子系统类,必须修改外观类或客户端的源代码,这将违背开闭原则,因此可以通过引入抽象外观类来对系统进行改进,在一定程度上可以解决该问题。在引入抽象外观类之后,客户端可以针对抽象外观类进行编程,对于新的业务需求... 阅读全文
posted @ 2013-11-11 13:35 Wishmeluck 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 4. 抽象外观类 在标准的外观模式结构图中,如果需要增加、删除或更换与外观类交互的子系统类,必须修改外观类或客户端的源代码,这将违背开闭原则,因此可以通过引入抽象外观类来对系统进行改进,在一定程度上可以解决该问题。在引入抽象外观类之后,客户端可以针对抽象外观类进行编程,对于新的业务需求... 阅读全文
posted @ 2013-11-11 13:35 Wishmeluck 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 3. 外观模式应用实例 下面通过一个应用实例来进一步学习和理解外观模式。 1. 实例说明 某软件公司欲开发一个可应用于多个软件的文件加密模块,该模块可以对文件中的数据进行加密并将加密之后的数据存储在一个新文件中,具体的流程包括三个部分,分别是读取源文件、加密、... 阅读全文
posted @ 2013-11-11 13:34 Wishmeluck 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 原文:http://blog.csdn.net/lovelion/article/details/8258121深入浅出外观模式(一)外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦... 阅读全文
posted @ 2013-11-11 13:32 Wishmeluck 阅读(175) 评论(0) 推荐(0) 编辑