02.10 桥模式
摘要:设计模式——桥模式需求从现实故事说起,长虹与海尔都是大的电视机生产商,都能够生产21英寸与37英寸的电视,这个问题应该如何建模呢?下面尝试使用继承关系实现: // 定义一个制造商接口 public interface IManufacturer { void ShowName(); } // 再定义一个电视接口 public interface ITV { void Produce(); } // 定义2个电视机子类 public class TV21inches : ITV // 21英寸电视机 { public void Produce() { Console.WriteLine(&quo
阅读全文
posted @
2012-10-08 15:12
萨迦狐
阅读(152)
推荐(0) 编辑
02.09 装饰模式
摘要:设计模式——装饰模式需求从一个编程任务说起。有段旧代码如下: public class Girl { public virtual void GoSchool() { Console.Write("女孩去上学!"); } }客户提出了新的要求,随着时代的进步,现代女孩上学还需要增加新的功能,有带个花花帽子,穿个漂亮裙子,画眉涂口红等可选功能,但是旧类不允许修改,因为旧的功能还是适合那些传统女孩,还在那些情况下有用。总结就是:不修改旧类代码的情况下,需要增加新的功能;这些新增的功能还可以任意组合。下面先尝试用继承机制来实现。继承旧类来实现添加功能:女孩戴个花花帽子 publi
阅读全文
posted @
2012-10-07 17:16
萨迦狐
阅读(139)
推荐(0) 编辑
02.08 代理模式
摘要:设计模式——代理模式需求现实生活中,我们难免会需要对一些不熟悉的行业处理事情,常常就找专业的中介机构来代办这些事情:例如法律事务聘请律师代理办案,买二手房找专业的房产中介代办,银行基金理财找基金理财顾问,这些专业的中介都是代理模式(Proxy Pattern)的实际应用。在程序开发中,也有类似的事情。例如设计好了业务规则类,又想添加权限控制。如果直接修改业务规则类代码加进去,则违反了单一职责的原理。那么可以再设计一个代理类,在这里代理类里调用业务规则功能,但是添加需要的权限控制就可以了。还有一种情况,如果开发的系统会依赖于其它系统的某些功能,但是那些被依赖的系统可能因为这样那样的原因还不稳定,
阅读全文
posted @
2012-10-07 00:48
萨迦狐
阅读(220)
推荐(0) 编辑
02.07 适配器模式
摘要:设计模式——适配器模式需求你想使用一个已经存在的类,但是它的接口不符合你的要求,怎么办?这样的问题在生活中很普遍:现在大部分笔记本电脑使用USB接口,而现在大部分键盘使用PS2接口,可以使用PS2/USB接口转换器把它们接起来。编程也可以采用这种转换器的思想。定义适配器模式(Adapter Pattern):将一个类的接口,转换成客户期望的另一个类的接口。适配器让原本接口不兼容的类可以合作无间。别名包装(Wrapper)模式。适配器模式的实现方法可以概括为:单独设计一个适配器(Adapter)类,包装(Wrapper)需要适配的源(Adaptee),继承/实现需要适配的目标(Target),重
阅读全文
posted @
2012-10-05 04:12
萨迦狐
阅读(218)
推荐(0) 编辑
02.06 外观模式
摘要:设计模式——外观模式需求.NET程序员大多使用过System.SqlClient、System.OracleClient、System.OleDb,尽管针对的数据库不同,这些类库体系都是实现访问数据库功能。尽管体系结构很相似,使用方法很相似,但是各对应类名称的不同,还是需要各写各的,如果能进行封装,形成一套统一的方法调用就好了。从理论层次来说就是,在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的外观模式(Façade P
阅读全文
posted @
2012-10-04 01:18
萨迦狐
阅读(177)
推荐(0) 编辑
01.05 单例模式
摘要:设计模式——单例模式需求在各种应用环境中,应该能发现某些类在这样一点上与众不同:这个类在同一时刻只能有一个对象实例,不允许多个。像一个网站的访问计数器,只能是全局唯一实例,这就需要单例模式(Singleton Pattern)。定义单例模式就是确保一个类只有一个实例,并且该实例必须自动创建,并向整个系统提供该实例。实现原理:(1)将构造函数定义成私有或者受保护,使得不能通过构造函数来创建对象;(2)定义一个静态的方法提供公共接口,用于访问维一的实例。单例模式特征:(1)任何时刻单例类只能有一个实例;(2)单例类自己创建这个唯一的实例;(3)单例类必须给所有其他对象提供这个实例。单例模式又可以分
阅读全文
posted @
2012-10-03 23:38
萨迦狐
阅读(212)
推荐(0) 编辑
01.04 原型模式
摘要:设计模式——原型模式需求比如有个对象,在某一时刻该对象中已经包含了一些有效值,此时可能会需要一个和该对象完全相同的新对象,并且此后对对象的任何修改都不会影响到原来对象中的值。也就是说,新对象与原来的对象是两个完全独立的对象,仅仅新对象的初始值是由原来对象确定的。这样的要求,显然可以以原来的对象为原型,复制出一个新对象来(好像没什么问题,其实在OOP中要注意浅表复制与深度克隆的区别),这种思想就是原型模式(Prototype Pattern)。定义意图:用原型对象指定要创建的对象的类型,并且通过拷贝这些原型对象创建新的同类型对象。原理:通过拷贝一个现有的对象来生成新的同类型的对象。原型设计模式包
阅读全文
posted @
2012-10-03 23:35
萨迦狐
阅读(186)
推荐(0) 编辑
01.03 构建者模式
摘要:设计模式——构建者模式需求在抽象工厂模式中,每个具体的工厂负责创建一个系列相互关联的产品,当一系列相互关联的产品设计到一个工厂类里后,客户端的调用会变得简单;如果要更换这一系列的产品,只只要切换一个具体的工厂类即可。但是,在实体工厂里包含着零件组装逻辑,这违反了工厂类的单一职责原则,使得工厂类既要负责对象的创建,又要负责零件的组装。如果把组装逻辑转移到客户端,则又会使得客户端变得臃肿。如何设计一个单独的类来负责零件的组装,就可以解决则各问题,而且可以组装出不同系列,这就是构建者模式(Builder Pattern)的由来。定义在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部
阅读全文
posted @
2012-10-03 01:35
萨迦狐
阅读(214)
推荐(0) 编辑
01.02 抽象工厂模式
摘要:设计模式——抽象工厂模式需求在工厂方法模式中,一个具体的工厂负责创建一个单一的产品。如果有多个产品要创建,就需要多个不同的工厂类,即使这些产品有某些必然的联系,如多个产品家族或者多个配套产品系列,也是需要多个看起来分散的工厂类。举个实际的例子,游戏中男孩的帽子、鞋、衣服区别与女孩的帽子、鞋、衣服,各成一个系列,如果使用工厂方法模式来实现,那么那些实体工厂类就在代码上不能体现其配套的内在来年西,看起来太分散了。而抽象工厂模式就是针对多个产品结构而言的,它主要帮助客户一次创建一个家族的多个产品对象。定义抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。又称为Kit模
阅读全文
posted @
2012-10-02 16:20
萨迦狐
阅读(178)
推荐(0) 编辑
01.01 工厂方法模式
摘要:设计模式——工厂方法模式需求简单工厂模式,简单地实现了对象创建工作和方法使用的分离,实现了模块的责任分配,但是所有对象的创建工作都集中到了那个工厂类里。但是,如果需要创建的对象很多,这个工厂类就会非常庞大,仍然不利于后期的代码维护,怎么办?根据面向对象的思想,应该继续进行职责的分配和封装,也就是说,如果把每一个产品都由一个具体的工厂来创建,把简单工厂模式中那个庞大的工厂拆分成一个个小工厂类,这样每个具体的工厂类只负责某类对象的创建,职责就分配开了,这就是工厂方法模式。定义工厂方法模式(Factory Method pattern)相对于简单工厂模式来说,就是把一个单一的工厂类,分成了多个具体的
阅读全文
posted @
2012-10-02 04:06
萨迦狐
阅读(175)
推荐(0) 编辑
01.00 简单工厂模式
摘要:设计模式——简单工厂模式需求在程序设计中,常常需要把对象的创建与使用分离开来,创建型模式都是为了解决此类问题。简单工厂模式是所有工厂模式中最简单的一个,是学习其它模式的基础。许多时候,我们需要一个类来负责根据情况简单地创建类的对象,而客户程序负责使用即可,就可以用到这种模式。定义简单工厂由3部分组成:(1)首先定义一个抽象产品类来描述产品规格;(2)再定义各具体的产品类实现抽象产品类描述的规格;(3)再定义一个静态的工厂方法负责根据传入参数来创建具体的实体产品对象,这个静态工厂方法最后写在一个单独的类里。由于这个工厂方法是静态的,所以简单工厂模式又名静态工厂方法模式(Static Factor
阅读全文
posted @
2012-10-02 02:19
萨迦狐
阅读(174)
推荐(0) 编辑
00.00 设计模式总介
摘要:设计模式——总介分类GoF总结出来23种设计模式,大体上可以分为3大类,分别从对象的创建、对象的结构及对象的行为这3个方面来总结代码编写经验。第一大类:创建型模式 在程序设计中,如果将对象的创建和使用都放在客户程序中一起执行,首先会使得客户的资源效率占用很大;客户程序代码增大,又使得客户程序的维护费用加大。所以很多时候有必要把对象的创建与使用分离开来,创建型模式就是为了解决这类问题,正所谓“分而治之”,大家都省心。这样做也可以满足一些特殊的需求。 01.00 简单工厂模式(Simple Factory) 01.01 工厂方法模式(Factory Method) 01.02 抽象工厂模式(Abs
阅读全文
posted @
2012-10-02 00:10
萨迦狐
阅读(187)
推荐(0) 编辑