
设计模式
文章平均质量分 85
yuanhaitaozz
啊啊啊啊啊啊啊啊
展开
-
大话设计模式之策略模式
策略模式: 它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 //定义所有支持的算法的公共接口-------------------------------abstract class Strategy{ publicabstract void AlgInterface();};//----原创 2015-04-02 23:10:32 · 377 阅读 · 0 评论 -
大话设计模式之状态模式
状态模式 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 abstractclass State{ public abstract void Handler(Context context);}; class ConcretStateA :State{ public override void Handler(Context原创 2015-04-25 09:57:57 · 1075 阅读 · 0 评论 -
大话设计模式之享元模式
运用共享技术有效的支持大量细粒度的对象。 //是所有具体享元类的超类或接口,通过这个接口,fliweight可以接收并作用于外部状态abstractclass Flyweight{ //参数为代码的外部状态,子类可以根据外部状态发生变化 public abstract void Operation(int extrinsicstate);}; clas原创 2015-05-14 11:39:26 · 461 阅读 · 0 评论 -
大话设计模式之单例模式
保证一个类仅有一个实例,,并提供一个访问它的全局访问点 //懒汉式class Singleton{ private static Singleton instance; private Singleton() {} public static Singleton GetInstance() { if (NULL原创 2015-05-06 22:05:41 · 983 阅读 · 0 评论 -
大话设计模式之访问者模式
我们来实现这几句话: abstractclass Action{ //男人时的结论 public abstract void GetManColclusion(Man x); //女人时的结论 public abstract void GetWomanColclusion(Woman x);}; abstractclass原创 2015-05-13 12:56:10 · 399 阅读 · 0 评论 -
大话设计模式之组合模式
将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象好人组合对象的使用具有一致性。 //Component为组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为。//声明一个借口用于访问和管理Component的子部件abstractclass Component{ protected string name; pub原创 2015-05-04 11:05:30 · 381 阅读 · 0 评论 -
大话设计模式之命令模式
命令模式将一个请求封装为对象,从而使你可用不同请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作abstractclass Command{ protected Receiver re; public Command(Receiver re) { this.re = re; } abstract原创 2015-05-10 10:40:28 · 380 阅读 · 0 评论 -
大话设计模式之桥接模式与合成/聚合复用原则
合成/聚合复用原则 之前的大部分模式,我们可以发现大多使用到了继承。 然而,对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类代替。 ‘继承’这种依赖关系限制了灵活原创 2015-05-08 20:43:24 · 605 阅读 · 0 评论 -
大话设计模式之备忘录模式
备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象回复到原先保存的状态 Originator可根据需要决定Memento存储Originator的哪些内部状态Memento有两个接口,Caretaker只能访问到备忘录的窄接口,它只能将备忘录传递给其他对象。Originator能看到一个宽接口,允许他访原创 2015-04-27 21:46:02 · 435 阅读 · 0 评论 -
大话设计模式之适配器模式
适配器模式 将一个类的接口转换成用户希望的另一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 当我们发现系统的数据和行为都正确,但接口不符合时,我们应该考虑用适配器,目的使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。 //这是客户所期待的接口原创 2015-04-26 10:06:56 · 473 阅读 · 0 评论 -
大话设计模式之原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节,基本代码如下: //原型类abstractclass Prototype{ private string id; public Prototype(string id)原创 2015-04-09 11:47:37 · 449 阅读 · 0 评论 -
大话设计模式之抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 在文章一开始,作者提出针对相同的程序采用不同的数据库,从而采用工厂模式。以下结构图为对User表和Department表采用的sqlserver和access的不同的具体实现,然后提取到各自的Factory类中去。 using System;usingSystem.Coll原创 2015-04-20 11:42:58 · 539 阅读 · 0 评论 -
大话设计模式之外观模式
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这一接口使得这一子系统更加容易使用 //几个子系统的类classSubSystem1{ public void Method1() { //... }}; classSubSystem2{ p原创 2015-04-14 16:39:07 · 434 阅读 · 0 评论 -
大话设计模式之观察者模式
观察者模式 该模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能自动更新自己。 //Subject类,可翻译为主题或者抽象通知类,一般用一个抽象类或一个接口实现。//它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对原创 2015-04-19 18:55:52 · 445 阅读 · 0 评论 -
大话设计模式之模板模式和迪米特法则
模板方法模式 定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤 abstractclass AbstractClass{原创 2015-04-12 10:24:03 · 456 阅读 · 0 评论 -
大话设计模式之工厂模式
简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态的实例化相关的类,对于客户端来说,去除了与具体产品的依赖 但是,查看之前关于简单工厂模式的代码中,我们发现在添加功能时我们不仅仅要添加类,更是要求修改工厂类,这显然违背了 开放-封闭 原则! 于是诞生了工厂模式 定义一个用于创建对象的接口,让子类决定实例原创 2015-04-07 11:40:01 · 409 阅读 · 0 评论 -
大话设计模式之代理模式
为其他对象提供一种代理以控制对这个对象的访问 abstractclass subject{ public abstract void Request();}; classRealsubject :subject{ public override void Request() {原创 2015-04-07 11:36:31 · 456 阅读 · 0 评论 -
大话设计模式之三个原则与装饰模式
单一职责原则就一个类而言,应该仅有一个可以引起他变化的原因。如果一个类承担的职责太多,就等于把这些职责都耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏如果能想到多于一个的动机去改变一个类,那么这个类就具备多于一个的职责,就应该考虑类的职责分离 开放-封闭原则 是说软件实原创 2015-04-02 23:21:06 · 477 阅读 · 0 评论 -
大话设计模式之建造者模式
将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。比如同一种圆,可以有不同的半径(细节)建造者模式又叫‘生成器模式’如果我们使用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体的建造过程和细节就不需要知道了 //抽象的建造人的类abstractclass PersonBuilder{ public abstract原创 2015-06-10 15:43:16 · 463 阅读 · 0 评论