面向对象设计模式
firewolffeng
vfsfdfds
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C#面向对象设计模式纵横谈 学习笔记11 Facade外观(结构型模式)
假设我们需要开发一个坦克模拟系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎、控制器、车轮、车身等各子系统构成。 public class Wheel...{ public void WAction1() ...{ } public void WAction2() ...{ }}public class Engine...{ publ原创 2008-01-25 00:28:00 · 781 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记15 Command命令模式(行为型模式)
命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一原创 2008-09-18 00:14:00 · 1179 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记16 Interpreter 解释器模式(行为型模式)
Interpreter模式是一种比较不常用的模式,因为这种模式存在一些弊端,他的使用有很大的条件限制。Interpreter是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言,用来解释预先定义的文法。简单地说,Interpreter模式是一种简单的语法解释器构架。先借用李建忠老师的代码例子 public class Program { s原创 2008-09-20 14:58:00 · 1688 阅读 · 2 评论 -
C#面向对象设计模式纵横谈 学习笔记14 Template Method模板方法(行为型模式)
Template Method模式是纯粹利用面向对象语言多态性来实现的一种模式意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 其实这种模式是设计模式中最简单的一种,他代表的意义是,比如基类需要写一个方法,但是某些事情需要延迟到子类才能确定(或某些事情子类可以进原创 2008-09-17 00:05:00 · 691 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记17 Mediator 中介者模式(行为型模式)
意图 用一个中介对象来封装一系列对象的交互。中介者使得各对象不需要显式相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。Mediator模式解决了一个问题,多个类相互引用相互,相互影响,这时候类的关系模型是复杂的,一个类对象的变化会导致其他类对象的变化,这种场景有点连锁反应的意思。下面有一段代码class CutMenuItem {原创 2008-09-23 21:05:00 · 1485 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记18 Iterator迭代器模式(行为型模式)
迭代器模式我们在平时的开发中应该经常用到。不直接使用也会间接使用,我们使用foreach语句来循环就是在间接的使用迭代器模式迭代器就像指针一样可以向前向后移动,在.net中迭代器只能向后移动.动机:在软件的构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合原创 2008-09-24 00:53:00 · 1082 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记19 Observer观察者模式(行为型模式)
意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。动机在软件构建过程中,我们需要为某些对象建立一种"通知依赖关系"。一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好的抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关原创 2008-09-28 01:19:00 · 1444 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记20 Chain of Responsibility职责链模式(行为型模式)
动机:在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少的带来请求发送者与接受者的紧耦合。必须是请求的发送者不需要指定具体的接受者,让请求的接受者自己在运行时决定来处理请求,从而使两者解藕。意图:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理为止。原创 2008-10-04 00:57:00 · 1236 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记21 Memento备忘录模式(行为型模式)
动机:在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态.如果使用一些共有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。我们需要实现对象状态的良好保存与恢复,但同时不会因此而破坏对象本身的封装性。意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态原创 2008-10-05 01:50:00 · 1193 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记24 Visitor访问者模式(行为型模式)
动机:在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的改变,将会给子类带来很繁重的变更负担,甚至破坏原有设计。如何在不更改类层次结构的前提下,在运行时根据需要透明的为类层次结构上的各个类动态添加新的操作,从而避免上述问题?意图:标识一个作用于某对象结构中的各元素的操作。它可以在不改变各元素的类的前提下定义作用于这些元素的新的操作。原创 2008-10-07 23:56:00 · 1539 阅读 · 1 评论 -
C#面向对象设计模式纵横谈 学习笔记13 Proxy代理模式(结构型模式)
代理模式从本质上来看类似与明星的代理制度。明星出名之后有许多事情,如广告的洽谈、演唱会的洽谈,形成的安排等等繁琐的事情,但是明星亲自去解决这些事情会非常繁琐,那么他就会去找一个代理人帮助他安排、计划这些事情。在软件开发中也如同这个类似。最典型的就是远程方法调用,或者是WebService的调用。假设在远程服务器上有一个类Employeeclass Employee : IEmplo原创 2008-09-12 22:52:00 · 786 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记12 FlyWeight享元模式(结构型模式)
在我们面向对象编程时,我们会经常将很多对象封装在一起,成为对象A,如果A中的某个对象所占用的内存比较大,同时我们需要创建很多对象A,我们需要一种设计模式来解决这个问题。打个比方,假设有一个网络游戏,同时有很多用户在线,那么我们就要创建很多网游用户对象,但是每个用户对象都包含了衣服对象,但是这个衣服对象的类别就3中,我们肯定不希望为每个用户来创建一个衣服对象,那么我们就将衣服对象放入一个共享池里,那原创 2008-09-11 22:45:00 · 759 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记1 面向对象设计模式与原则
设计模式的第一课内容主要是介绍了什么是设计模式Gof23种设计模式:历史性著作《设计模式:可复用面向对象软件的基础》一书中描述了23种经典面向对象设计模式,创立了模式在软件设计中的地位。该书四位作者被人们并称为Gang of Four (GoF),"四人组",该书描述的23种经典设计模式又被人们称为Gof23 种设计模式。Gof23种设计模式并不意味着它表示了所有的面向对象的设计模式。面向原创 2007-12-18 23:55:00 · 936 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记2 Singleton单例模式
这一讲主要讲的是创建型模式中的单例模式首先说明了模式的分类从目的来看: 创建型(Creational)模式:负责对象创建。 结构型(Structural)模式:处理类与对象间的组合。 行为型(Behavioral)模式:类与对象交互中的职责分配。 从范围来看: 类模式处理类与子类的静态关系。 对象模式处理对象间的动态关原创 2007-12-20 02:20:00 · 1475 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记3 Abstract Factory 抽象工厂
这一讲的内容首先说明了对象创建的方法如Road road = new Road();这样我们就创建了一个路的实例。但是现在我们问题出现了,如果我们现在路变了,假设我们的路变成了水泥路,那么我们在使用路的代码里需要将所有的Road road = new Road()编程实例为一个水泥路。那么我们现在知道了new的问题的所在,实现依赖,不能应对"具体实例化类型"的变化。那么原创 2007-12-20 23:25:00 · 734 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记4 Builder 生成器(创建型模式)
这一讲的内容是Builder生成器模式 先看看Builder模式的动机 在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 对比一下抽象工厂的动机:在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作;同时,由于需求的变化,往往存在更多系原创 2007-12-31 05:15:00 · 779 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记5 Factory Method 工厂方法(创建型模式)
1、Factory Method工厂方法模式的动机在软件系统中,经常面临着"某个对象"的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?如何提供一种"封装机制"来隔离出"这个易变对象"的变化,从而保持系统中"其他依赖该对象的对象"不随着需求改变而改变?2、Factory Method工厂方法模式的意图:定义一个用于创建对象的接口,让子类决定原创 2008-01-03 00:04:00 · 804 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记6 Prototype 原型(创建型模式)
Prototype模式的动机在软件系统中,经常面临着"某些结构复杂的对象"的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向"客户程序(使用这些对象的程序)"隔离出"这些易变对象" ,从而使得"依赖这些易变对象的客户程序"不随着需求改变而改变?Prototype模式的意图使用原型实例指定创建对象的种类,然后通过拷贝这些原原创 2008-01-07 01:00:00 · 816 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记7 Adapter适配器(结构型模式)
.从现实生活上来说,适配器可以想象为三相插头和二相插头的转换接头。那么适配的定义就是在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。适配器模式的动机在软件系统中,由于应用环境的变化,常常需要将"一些现存的对象"放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种"迁移的变化"?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?原创 2008-01-08 01:24:00 · 784 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记8 Bridge桥接(结构型模式)
桥接模式的动机假设我们有一个坦克游戏的开发,那么这个坦克有多种类型,并且这个游戏要支持多种平台的游戏事实上由于Tank类型的固有逻辑,使得Tank类型具有了两个变化的维度--一个变化的维度为"平台的变化",一个变化的维度为"型号的变化"。如何应对这种"多维度的变化"?如何利用面向对象技术来使得Tank类型可以轻松地沿着"平台"和"型号"两个方向变化,而不引入额外的复杂度?桥接模式的意图原创 2008-01-09 01:47:00 · 1027 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记9 Composite 组合(结构型模式)
在我们开发过程中,我们可能需要用到一种设计,一个容器可以包含一个对象,并且也可以包含一个容器,我们需要通过一个接口或一个抽象类来表示这个容器或对象,也就是说容器或对象是同一总类型,但是包含关系,也就是说我们需要用一种模式来实现多叉树的结构。节点可以包含字节点,也可以包含子项。我们可以通过Composite模式来实现。首先看看Composite模式的动机:如何将"客户代码与复杂的对象容器原创 2008-01-11 00:33:00 · 1038 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记10 Decorator 装饰(结构型模式)
当我们在设计一个一个类继承结构的时候,我们可能会存在以下的情况。首先有一种坦克的抽象类,那么这个坦克会有很多中类型,那么我们就派生这个坦克吧。比如说有德国虎式坦克,轻型坦克和工程坦克,那么现在又有三种功能要扩展到这三种坦克上,如两栖功能、夜视功能、雷达功能,可以把这三种功能设置为接口。按类继承的设计方案,如果需要这三种坦克每种坦克都有相应的功能坦克,我们需要继承Tank类,并实现相应功能的接口,那原创 2008-01-19 00:56:00 · 851 阅读 · 0 评论 -
C#面向对象设计模式纵横谈 学习笔记22 State模式(行为型模式)
动机:在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同,如何在运行时根据对象的状态来透明的更改对象行为?而不会为对象操作和状态转化之间引入紧耦合?意图:允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为public class Context {原创 2008-10-06 00:20:00 · 1299 阅读 · 0 评论
分享