
设计模式
jinzhengquanqq
上次写博客还是2010年……
展开
-
模式一(简单工厂)
根据提供给它的数据,返回几个可能类中的一个实例,通常返回的类是公共的父类,公共的方法或接口。工厂类角色:工厂类在客户端的直接控制下创建产品对象抽象产品角色:定义简单工厂创建的对象的父类或它们共同拥有的接口,可以是一个类,抽象类或接口。具体产品角色:定义工厂具体加工出的对象。using System;using System.Collections.Generic;using System.Text;namespace Simple_Factory{ /// /// 抽象类 ///原创 2010-08-10 22:33:00 · 314 阅读 · 0 评论 -
设计模式十五(责任链模式)
行为模式是对在不同的对象之间划分责任和算法的抽象化,行为模式不仅仅是关于类和对象的,而且是关于他们之间的相互作用的。行为模式分为类的行为模式和对象的行为模式:类的行为模式:类的行为模式使用继承关系在几个类之间分配行为。对象的行为模式:对象的行为模式则使用对象的聚合来分配行为。责任链模式是一种对象的行为模式,在责任链模式里,很多对象由每一个对象对其下家的引用而链接起来形成一条链,请求在这个链上传递,知道链上的某一个对象决定处理此请求,发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以原创 2010-08-18 18:35:00 · 335 阅读 · 0 评论 -
模式十四(桥梁模式)
<br />桥梁模式是一个非常有用的模式,也是比较复杂的一个模式,熟悉这个模式对于理解面向对象的设计原则,包括"开--闭"原则以及组合/聚集复用原则都很有帮助,理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。<br /> <br />桥梁模式的用意<br />在提出桥梁模式的时候指出,桥梁模式的用意是“将抽象化与实现化脱耦,使得二者可以独立地变化”,这句话有三个关键词,也就是抽象化,实现化和脱耦。<br /> <br />抽象化<br />存在于多个实现中的共同的概念性联系,就是抽象化,作为原创 2010-08-17 13:03:00 · 1501 阅读 · 0 评论 -
模式十三(门面模式)
<br />外部与一个子系统的通信必须通过一个统一的门面对象进行,这就是门面模式。<br />门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面对象进行,门面模式提供一个高层次的接口,使得子系统更易于使用。门面角色:客户端可以调用这个角色的方法,此角色知晓相关的子系统的功能和责任,在正常情况下,本角色会将所欲从客户端发来的请求委派到相应的子系统去。子系统角色:可以同时有一个或者多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合,每一个子系统都可以被客户端直接调用,或者被门面角色调用,原创 2010-08-17 10:58:00 · 361 阅读 · 0 评论 -
模式十一(代理模式)
<br />代理模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。<br /> <br />代理的种类:<br />远程代理:为一个位于不同的地址空间的对象提供一个局域代表对象,这个不同的地址空间可以是在本机器中,也可是在另一台机器中,<br />虚拟代理:根据需要创建一耳光资源消耗较大的对象使得此对象只在需要时才会被真正创建。<br />copy-on-write代理:虚拟代理的一种,把复制拖延到只有在客户端需要时,才真正采取行动。<br />保护代理:控制对一个对象的访问,如果需要,可以给不原创 2010-08-15 16:36:00 · 319 阅读 · 0 评论 -
模式十(装饰模式)
装饰模式又名包装模式,装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式使用原来被装饰的类的一个子类的实例,把客户端的调用委派到被装饰类,装饰模式的关键在于这种扩展是完全透明的。 抽象构件角色:给出一个抽象接口,以规范准备接收附加责任的对象。具体构件角色:定义一个将要接收附加责任的类。装饰角色:持有一个构件对象的实例,并定义一个与抽象构件接口一致的接口。具体装饰角色:负责构件对象“贴上”附加的责任。using System;using System.Collections.Ge原创 2010-08-15 12:38:00 · 306 阅读 · 0 评论 -
模式九(合成模式)
合成模式有时又叫做部分-整体模式,合成模式将对象组织到树结构中,可以用来描述整体与部分的关系,合成模式可以使客户端将单纯元素与复合元素同等看待。对象的树结构:一个树结构由两种结点组成:树枝结点和树叶结点,树枝结点可以有子结点,而一个树叶结点不可以有子结点,除了根结点外,其他结点有且只有一个父节点。一个树枝结点可以不带任何叶子,但是它因为有带叶子的能力,因此仍然是树枝结点,而不会成为叶节点,一个树叶结点永远不可能带有子节点。抽象构件角色:这是一个抽象角色,它给参与组合的对象规定一个接口,这个角色给出共有接口及原创 2010-08-15 00:52:00 · 438 阅读 · 0 评论 -
模式十二(享元模式)
享元模式以共享的方式高效地支持大量的细粒度对象,享元对象能做到共享的关键是区分内蕴状态和外蕴状态,内蕴状态是存储在享元对象内部并且不会随环境改变而改变,因此内蕴状态并可以共享。外蕴状态是随环境改变而改变的,不可以共享的状态,享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部,外蕴状态与内蕴状态是相互独立的。单纯享元模式的结构在单纯享元模式中,所有的享元对象都是可以共享的抽象享元角色:此角色是所有的具体享元类的超类,为这些类规定需要实现的公共接口,那些需要外蕴状态原创 2010-08-16 19:00:00 · 366 阅读 · 0 评论 -
模式八(适配器模式)
<br />结构模式描述如何将类或者对象结合在一起形成更大的结构,结构模式描述两种不同的东西:类与类的实例,所以结构模式可分为类的结构模式和对象的结构模式。<br /> <br />适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法再一起工作的两个类能够在一起工作。<br /> 目标角色:这是客户所期待的接口,因为c#不支持多继承,所以Target必须是接口,不可以是类。源角色:需要适配的类。适配器角色:把源接口转换成目标接口。using System;<br />using原创 2010-08-12 12:42:00 · 320 阅读 · 0 评论 -
带原型管理器的原型模式
客户角色:客户端类向原型管理器提出创建对象的请求。抽象原型角色:通常由一个c#接口或抽象类实现,此角色给出所有的具体原型类所需的接口,在c#中,抽象原型角色通常实现了ICloneable接口。具体原型角色:被复制的对象,此角色需要实现抽象的原型角色所要求的接口。原型管理器角色:创建具体原型类的对象,并记录每一个被创建的对象。using System;using System.Collections.Generic;using System.Text;using System.Collections;nam原创 2010-08-12 11:55:00 · 667 阅读 · 0 评论 -
模式六(原型模式)
通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个对象的办法创建更多的同类型对象客户角色:客户类提供创建对象的请求。抽象原型角色:这是一个抽象角色,通常由一个c#接口或抽象类实现,此角色给出所有的具体原型类所需的接口,在c#中抽象原型角色通常实现了ICioneable接口。具体原型角色:被复制的对象,此角色需要实现抽象原型角色所需求的接口。using System;using System.Collections.Generic;using System.Text;namespace Simple原创 2010-08-12 09:45:00 · 469 阅读 · 0 评论 -
设计模式要遵循的六大原则
一,“开放-封闭”原则(OCP) 一个软件实体应当对扩展开放,对修改关闭。优点: 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新的需求,使变化的软件有一定的适应性和灵活性。已有软件模块,特别是最重要的抽象层模块不能在修改,这使变化的软件系统有一定的稳定性和延续性。二,里氏代换原则(LSP)子类型必须能够替换他们的基类型。三,依赖倒置原则(DIP)要依赖于抽象,不要依赖于具体。抽象不应当依赖于细节,细节应当依赖于抽象,要针对接口编程,不针对实现编程。四,接口隔离原则(ISP)一个类对另一原创 2010-08-10 21:24:00 · 419 阅读 · 0 评论 -
模式五(建造者模式)
建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同德内部表象的产品对象。 建造者角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。具体建造者角色:担任这个角色的是于应用程序紧密相关的类,它们在应用程序调用下创建产品实例。主要任务包括:实现Builder角色提供的接口,一步一步完成创建产品实例得过程,在建造过程完成后,提供产品的实例。指导者角色:担任这个角色的类调用具体建造者角色以创建产品对象。导演者角色:没有产品类的具体知识,真正拥有产品类的具体知识的是原创 2010-08-11 11:26:00 · 373 阅读 · 0 评论 -
模式四(单子模式)
单例类只能有一个实例,单例类必须自己创建自己的唯一实例,单例类必须给所有其他对象提供这一事例。 using System;using System.Collections.Generic;using System.Text;namespace Simple_Factory{ class Singleton { /// /// 私有的类对象 /// private static Singleton instance; pro原创 2010-08-11 00:14:00 · 376 阅读 · 0 评论 -
模式三(抽象工厂模式)
抽象工厂是指一个等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。抽象工厂角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。具体工厂角色:这个角色直接在客户端的调用下创建产品的实例。抽象产品角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。具体产品角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。using System;using System.Collections.Generic;using System.Text;na原创 2010-08-10 23:45:00 · 302 阅读 · 0 评论 -
模式二(工厂方法模式)
工厂方法模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 抽象工厂角色:任何在模式中创建的对象的工厂类必须实现这个接口。具体工厂角色:这是实现抽象工厂接口的具体工厂类。抽象产品角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。具体产品角色:这个角色实现了抽象产品角色所定义的接口。using System;using System.Collections.Generic;using System.Text;namespace Simple原创 2010-08-10 23:11:00 · 374 阅读 · 0 评论 -
模式十六(命令模式)
命令模式属于对象的行为模式,命令模式又称为行动模式或交易模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同德请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式是对命令的封装,命令模式把发出命令的责任和执行命令的责任分隔开,委派给不同德对象。每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及原创 2010-08-18 21:39:00 · 372 阅读 · 0 评论