saville

博客园 首页 新随笔 联系 订阅 管理

2012年7月10日 #

摘要: 一、概述由于需求的改变,某些类常常需要增加新的功能,但由于种种原因这些类层次必须保持稳定,不允许开发人员随意修改。对此,访问者模式可以在不更改类层次结构的前提下透明的为各个类动态添加新的功能。二、访问者模式访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。其结构图如下:Visitor为每一个ConcreteElement声明一个Visitor操作。ConcreteVisitor实现了Visitor声明的操作,其定义的行为就是需要动态添加到ConcreteElement中的新功能。Element定义一个以Visitor为参数的Ac 阅读全文
posted @ 2012-07-10 12:19 saville 阅读(2271) 评论(2) 推荐(1) 编辑

2012年6月13日 #

摘要: 一、概述在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的。生成器模式可以处理这类对象的构建,它提供了一种封装机制来隔离各类子对象的变化,从而保证系统的稳定。二、生成器模式生成器模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。其结构图如下:Builder为创建Product对象的各个子对象指定抽象接口。ConcreteBuilder实现了Builder接口,用于创建Product对象的各个子对象。Director使用Builder来创建Product对象。Product表示被 阅读全文
posted @ 2012-06-13 10:50 saville 阅读(3381) 评论(2) 推荐(3) 编辑

2012年5月23日 #

摘要: 一、概述在软件开发中,有些对象由于创建成本高、访问时需要与其它进程交互等原因,直接访问会造成系统速度慢、复杂度增大等问题。这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系统复杂性、提高系统性能的目的。二、代理模式代理模式为其他对象提供一种代理以控制对这个对象的访问。其结构图如下:Subject定义了RealSubject和Proxy共用的接口,使得在任何使用RealSubject的地方都可以使用ProxyRealSubject定义了Proxy所代表的实体。Proxy定义了一个控制RealSubject的代理,供Client使用。代理模式根据用途不同可以分为几种类型 阅读全文
posted @ 2012-05-23 16:16 saville 阅读(1513) 评论(1) 推荐(0) 编辑

2012年4月12日 #

摘要: 一、概述在软件开发中,常常会想要复用一个已经存在的组件,但该组件的接口却与我们的需要不相符,这时我们可以创建一个适配器,在需复用的组件的接口和我们需要的接口间进行转换,从而能够正常的使用需复用的组件。这就是适配器模式。二、适配器模式适配器模式将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式可分为类适配器和对象适配器两种,类适配器使用多重继承对两个接口进行匹配,对象适配器则依赖于对象的组合。类适配器模式的结构图如下:对象适配器模式的结构图如下:Target定义了客户需要使用的接口。Adaptee定义了已经存在的那个接口,该接口需要通过 阅读全文
posted @ 2012-04-12 15:04 saville 阅读(2010) 评论(5) 推荐(1) 编辑

2012年3月15日 #

摘要: 一、概述在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?如何提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就可以用到工厂方法模式了。二、工厂方法模式工厂方法模式定义了一个用于创建对象的接口,让其子类决定实例化哪一个对象。使一个对象的创建工作延迟到其子类。工厂方法模式的结构图如下:Product定义了工厂方法所创建的对象的接口。ConcreteProduct实现Product接口, 定义了具体对象。Creator定义了具体对象创建 阅读全文
posted @ 2012-03-15 15:54 saville 阅读(4349) 评论(0) 推荐(2) 编辑

2012年2月7日 #

摘要: 一、概述在软件开发中,常常会需要创建一系列相互依赖的对象,同时,由于需求的变化,往往存在较多系列对象的创建工作。如果采用常规的创建方法(new),会造成客户程序和对象创建工作的紧耦合。对此,抽象工厂模式提供了一种解耦手段。二、抽象工厂模式抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式的结构图如下:AbstractFactory声明了一个创建抽象产品对象的操作接口。ConcreteFactory实现了创建具体产品对象的操作。AbstractProduct为一类产品对象声明一个接口。ConcreteProduct实现AbstractProduct接口, 阅读全文
posted @ 2012-02-07 16:51 saville 阅读(2852) 评论(2) 推荐(3) 编辑

2012年1月6日 #

摘要: 一、概述在软件开发过程中,我们有时候需要保证一个类仅有一个实例,比如在一个电脑用户下只能运行一个outlook实例。这时就需要用到单件模式。二、单件模式单件模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。。单件模式的结构图如下:Singleton负责创建自己的唯一实例,并定义一个Instance方法允许客户访问该实例。三、示例先来看看最简单的单件模式实现例子。 1 class SimpleSingleton 2 { 3 private static SimpleSingleton _instance; 4 5 private Simp... 阅读全文
posted @ 2012-01-06 09:29 saville 阅读(1401) 评论(1) 推荐(0) 编辑

2011年12月19日 #

摘要: 一、概述在软件开发过程中,我们可能会希望在不暴露一个集合对象内部结构的同时,可以让外部代码透明地访问其中包含的元素。迭代器模式可以解决这一问题。二、迭代器模式迭代器模式提供一种方法顺序访问一个集合对象中的各个元素,而又不需暴露该对象的内部表示。迭代器模式的结构图如下:Iterator定义了访问和遍历元素的接口。ConcreteIterator表示具体的迭代器,它实现了Iterator接口。Aggregate定义创建相应迭代器对象的接口。ConcreteAggregate实现创建相应迭代器对象的接口,返回ConcreteIterator的一个实例。三、示例在C#中,实现迭代器模式是非常方便的,特 阅读全文
posted @ 2011-12-19 13:39 saville 阅读(785) 评论(0) 推荐(0) 编辑

2011年11月16日 #

摘要: 一、概述我们来实现一个企业的工资系统,该企业中不同级别的员工工资算法都不相同,针对该问题,最容易想到的莫过于在代码中堆积一大堆if…else…语句或者是switch…case…语句。如果该企业中不同级别的员工过多,或是对级别的调整比较频繁,那该系统就会显得复杂而脆弱。如何能将对象和算法解耦,从而使得在系统运行时能透明的改变对象的算法呢?这就到了策略模式大显身手的时候了。二、策略模式策略模式定义了一系列算法,把它们一个个封装起来,并且使它们可相互替换。该模式可使得算法能独立于使用它的客户而变化。策略模式的结构图如下:Context代表需要改变算法的那个对象,它维护了一个对Strategy对象的引 阅读全文
posted @ 2011-11-16 16:41 saville 阅读(4765) 评论(2) 推荐(2) 编辑

2011年10月13日 #

摘要: 一、概述在面向对象软件设计时,常常碰到某一个对象由于状态的不同而有不同的行为。如果用if else或是switch case等方法处理,对象操作及对象的状态就耦合在一起,碰到复杂的情况就会造成代码结构的混乱。在这种情况下,就可以使用状态模式来解决问题。二、状态模式状态模式允许一个对象在其内部状态改变时改变它的行为,使对象看起来似乎修改了它的类。状态模式的结构图如下Context代表需要改变状态的那个对象,它维护了一个State实例,该实例定义了对象的当前状态。State定义了一个抽象类或是接口,用以封装与特定状态相关的行为。ConcreteState实现了State定义的行为。三、示例本文实现 阅读全文
posted @ 2011-10-13 14:20 saville 阅读(6319) 评论(7) 推荐(4) 编辑