
设计模式
文章平均质量分 68
越一步之距
调试的错误就是编程给你最好的东西,因为在每个错误上面都标志着前进的一步。
展开
-
设计模式原则—里氏替换原则(LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的。定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。定义2:所有引用基原创 2017-04-11 20:51:48 · 848 阅读 · 0 评论 -
创建型模式—建造者模式
建造者模式(Builder)将复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。在软件系统中,有时候面临一个复杂对象的创建工作,该对象通常由各个部分子对象用一定的算法构成,或者按一定的步骤组合而成;这些算法和步骤是稳定的,而构成这个对象的子对象却经常由于需求的变化而不断变化。在建造者模式中,Director规定了创建一个对象所需要的步骤和次序,Builder则提供了一些完成这些步骤的...原创 2017-08-07 12:14:42 · 292 阅读 · 0 评论 -
设计模式—结构型模式
结构型模式涉及到如何组合类和对象以获得更大的结构,就像搭积木,通过简单的积木组合形成复杂功能强大的结构。结构型模式采用继承机制来组合接口或实现,不是对接口和实现进行组合,而是描述如何对一些对象进行组合,从而实现新功能。 结构型模式主要包括: 适配器Adapter模式 桥接Bridge模式 组合Composite模式 ...原创 2018-03-03 09:35:23 · 288 阅读 · 0 评论 -
结构型模式—适配器模式
适配器模式将一个类的接口转换成客户希望的另外一个接口。使得原本不相容的接口可以协同工作。适用性:想使用一个已经存在的类,而它的接口不符合你的需求。想创建一个可以复用的类, 该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同 工作。 适配器模式角色: ◊ ITarget:Client所使用的与特定领域相关的接口。 ◊Client:与符合ITarget接口的对象...原创 2018-03-05 13:43:18 · 265 阅读 · 0 评论 -
结构型模式-组合Composite模式
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 "组合对象" 的含义。 组合模式让你可以优化处理递归或分级数据结构。 组合模式的结构包括Component、Leaf 、Composite 三个部分,其中: Component 是组合...原创 2018-04-08 15:48:47 · 393 阅读 · 0 评论 -
结构型模式-代理Proxy模式
代理模式为其他对象提供一种代理以控制对这个对象的访问,它侧重于增加间接层来简化复杂的问题。代理模式角色: ◊Subject:定义ConcreteSubject与Proxy的共用接口,从而在任何使用ConcreteSubject的地方都可以使用Proxy。 ◊ConcreteSubject:定义Proxy所代表的Subject。 ◊Proxy:1、维持一个引用,使得代理可以...原创 2018-04-14 13:18:40 · 331 阅读 · 0 评论 -
结构型模式-享元Flyweight模式
享元模式解决由于存在大量的细粒度对象而造成不必要的内存开销的问题,它与外观模式恰好相反,关注的重点是细小的对象。 享元对象共享是要区分内部状态和外部状态,内部对象不随环境的变化,可以共享;外部对象通常是由客户端调用的时候传递的,不共享。 享元模式角色: ◊Flyweight:声明一个接口,来接收并作用于外部状态。 ◊ConcreteFlyweight:实现...原创 2018-04-15 10:28:15 · 323 阅读 · 0 评论 -
结构型模式-桥接Bridge模式
桥接模式是通过将抽象和实现分离,让它们可以分别独立地变化,它强调的是系统沿着多个方向的变化;适配器模式和桥接模式具有一些共同的特征:他们都给另一对象提供了一定程度上的间接性,因而有利于系统的灵活性;它们都涉及从自身以外的一个接口向这个对象转发请求。这两种模式的不同之处主要在于它们各自的用途。适配器模式主要是为了解决两个已有接口之间不匹配的问题,它不考虑这些接口是怎样实现的;而桥接模式则对抽象接口与...原创 2018-04-05 11:00:41 · 468 阅读 · 0 评论 -
结构型模式- 装饰器Decorator模式
装饰模式采用对象组合而非继承的手法,实现在运行时动态的扩展对象功能的能力,它强调的是扩展接口。 装饰器模式角色:◊Component:定义一个对象接口,可以给这些对象动态地添加职责。◊ConcreteComponent:定义一个对象,可以给这个对象添加一些职责。◊Decorator:维持一个指向Component的指针,并定义一个与Component接口一致的接口。◊Concr...原创 2018-04-14 10:04:03 · 315 阅读 · 0 评论 -
结构型模式-外观Facade模式
外观模式将复杂系统的内部子系统与客户程序之间的依赖解除,它侧重于简化接口,更多的是一种架构模式。 外观模式角色:◊Facade:将客户端的请求转给相应的子系统处理。◊ SubSystem:实现各个子系统的具体功能。优点:1、实现子系统与客户端之间松耦合关系2、减少客户端处理对象的数目,使子系统使用其他更加方便容易。结构图:namespace Libraries.Test.Desig...原创 2018-04-14 11:15:34 · 353 阅读 · 0 评论 -
行为型模式-模板方法模式
定义一个操作框架,将一些具体的步骤延迟到子类中实现。使子类可以在不改变算法的结构上可以重定义改算法的某些特定步骤。 封装不变的部分,扩展可变部分,把不便的部分封装到父类中实现,可变的部分通过继承在子类中实现。 模板方法角色: AbstractClass定义一个模板,其子类将重定义PrimitiveOperation1和Primitiv...原创 2018-06-10 07:50:39 · 472 阅读 · 0 评论 -
创建型模式—单例模式
单例模式(Singleton)定义:要求一个类有且仅有一个实例,并且提供了一个全局的访问点,在同一时刻只能被一个线程所访问。 单例模式的特点: 1>、单例类只能有一个实例。 2>、单例类必须自身创建唯一实例。 3>、单例类必须给所有其它对象提供唯一实例。 单例模式使用注意点: 1>、不要使用单例模式存取全局变量。这违背了单例模式的用意,最原创 2017-08-21 11:15:20 · 317 阅读 · 0 评论 -
创建型模式—工厂方法模式
工厂方法模式是以一个类的实例化延迟到其子类。工厂方法模式用于在不指定待创建对象的具体类的情况下创建对象。工厂方法模式的主要意图是隐藏对象创建的复杂性。◊使用工厂方法在一个类的内部创建对象通常比直接创建对象更灵活 ◊工厂方法模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到子类,从而提供了一种扩展的策略,较好的解决了紧耦合的关系结构图支付接口使用工厂方法模式结构图namespace Li...原创 2017-07-14 17:26:41 · 333 阅读 · 0 评论 -
设计模式原则—依赖倒置原则(DIP)
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接原创 2017-04-12 20:43:18 · 517 阅读 · 0 评论 -
设计模式原则—接口隔离原则(ISP)
定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。接口隔离原则的含义是:建立单一接口,不要建立原创 2017-04-13 21:46:35 · 351 阅读 · 0 评论 -
设计模式原则—迪米特原则
定义:一个对象应该对其他对象保持最少的了解。问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。解决方案:尽量降低类与类之间的耦合。迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern University的Ian Holland提出。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑原创 2017-04-14 19:27:40 · 321 阅读 · 0 评论 -
设计模式原则—开闭原则(OCP)
定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。开闭原则是面向对象设计中最基础的设计原则,原创 2017-04-16 11:06:49 · 451 阅读 · 0 评论 -
设计模式原则—单一职责原则(SRP)
定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 也就是说,一个类应该只有一个职责。如果有多个职责,就相当于把这些职责耦合在一起,一个职责的变化会削弱或抑制这个类完成其他职责的能力,引发类的变化原因会有多个。所以在构造一个类的时候,将类的不同职责分离到多个类或者接口中,确保引起类的变化原因只有一个。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需原创 2017-04-11 20:40:18 · 654 阅读 · 0 评论 -
设计模式原则—组合重用原则
就是说要尽量的使用合成和聚合,而不是继承关系达到复用的目的,组合能更好的实现封装,比继承具有更大的灵活性和更稳定的结构。该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。原创 2017-05-08 10:08:18 · 2062 阅读 · 1 评论 -
创建型模式—简单工厂模式
在面向对象编程中,一般方法是用一个new操作符产生一个对象的实例。但是在一些情况下,用new操作符直接生成对象会带来一些问题。首先,要使用new运算符创建一个对象必须清楚所要创建的对象的类信息,包括类名、构造函数等,而有时并不现实。其次许多类型的对象创建需要一系列的步骤,可能需要计算或取得对象的初始设置,选择生成哪个子对象实例,或在生成需要的对象之前必须生成一些辅助功能的对象。在这些情况下,新对象...原创 2017-07-13 18:19:47 · 328 阅读 · 0 评论 -
设计模式—创建型模式
创建型模式即用来进行对象创建的的模式,创建型模式的目标是简化对象的创建和方便对象的管理。 ◊ 创建型模式(Creational Pattern)关注对象的创建过程 ◊ 创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离,对用户隐藏了类的实例的创建细节 ◊ 创建型模式描述如何将对象的创建和使用分离,让用户在使用对象时无须关心对象的创建细节,从而降低系统的耦合度,让...原创 2017-07-13 15:56:12 · 295 阅读 · 0 评论 -
创建型模式—原型模式
原型模式(Prototype)用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。Prototype Pattern也是一种创建型模式,它关注的是大量相同或相似对象的创建问题。应用原型模式就是建立一个原型,然后通过对原型来进行复制的方法,来产生一个和原型相同或相似的新对象,或者说用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式具有以下特点: ◊对客户隐藏了具体...原创 2017-08-18 11:30:37 · 299 阅读 · 0 评论 -
创建型模式—抽象工厂模式
抽象工厂(Abstract Factory)模式意图:为创建一组相关或相互依赖对象提供了一个接口,而且无需指定它们的具体类。抽象工厂可以向客户提供一个接口,是客户可以在不必指定产品具体类型的情况下,创建多个产品家族中的产品对象,它强调的“系列对象”的变化。在抽象工厂模式中,产品的创建由ConcreteFactory来完成,从结构图中可以看出,抽象工厂模式的ConcreteFactory不是负责一种...原创 2017-07-28 14:42:20 · 339 阅读 · 0 评论 -
行为型模式-观察者模式
对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 Subject 抽象的主题,被观察的对象,提供Attach和Detach Observer对象的接口。 ConcreteSubject具体的被观察对象,维持ConcreteSubject状态。当状态发生变化时,发送消息通知它的观察者。 Obse...原创 2018-06-10 10:37:42 · 456 阅读 · 0 评论