随笔分类 - 设计模式
摘要:1、意图装饰模式:动态的给一个对象添加一些额外的职责(不重要的功能,只是偶然一次要执行)。就增加功能来说,Decorator模式比使用继承生成子类更为灵活。 建造过程不稳定,需要把所需的功能按正确的顺序串联起来进行控制。2、优缺点分析GOOD:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功能),就会增加类的复杂度。 装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象, 当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。3、UML标准图1)Compone
阅读全文
摘要:一、意图 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,本模式使得算法可独立于使用它的客户而变化——四人团二、基本思想 定义算法家族,分别封装起来,让它们之间可以互相替换,让算法的变化,不会影响到使用算法的用户。 三、优缺点分析GOOD: (1)策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同。 所以使用策略模式,就可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。 (2)策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能 (3)简化了单元测
阅读全文
摘要:1、意图定义对象间的一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己。2、核心思想 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。使用动机: 将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。本模式适用情况:(1)当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象
阅读全文
摘要:1、当涉及到“维护”时,为了“复用”目的而使用继承,并不是最好的方法。 2、利用继承来提供对象的行为,会导致以下缺点: 1)代码在多个子类中重复; 2)运行时的行为不容易改变; 3)很难知道所有子类的全部行为; 4)改变父类会牵一发而动全身,造成其他子类不想要的改变; 3、使用接口(JAVA)或虚基类加多重继承(C++)方法,则会需要对需要维护的代码中的每个子类都分别考虑其特有方法的继承来源。 4...
阅读全文
摘要:1、意图 享元模式:运用共享技术有效地支持大量细粒度的对象 2、核心思想 享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。 内蕴状态存储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态,它们是相互独立的。 将可以共享的状态和不可以共享的状态从常规类中区分开来,将不可以共享的状态从类里剔除出去。...
阅读全文
摘要:1、意图 中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互 2、核心思想 包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作...
阅读全文
摘要:1、意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 2、核心思想 在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上具体的哪一个对象最终处理了这个请求,系统可以在不影响客户端的情况下,动态的重新组织链和...
阅读全文
摘要:1、意图 命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作 2、核心思想 命令模式:把一个请求或者操作封装到一个对象中,命令模式把发出命令的责任和执行命令的责任分割开来,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何...
阅读全文
摘要:1、合成聚合原则 缘由:对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。 原则: 合成/聚合原则(CARP):尽量使用合成/聚合,尽量不要使...
阅读全文
摘要:1、意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点 2、核心思想 确保某个类只有一个实例(类的静态成员变量),而且自行实例化并向整个系统提供这个实例单例模式。 直接将类的构造方法改成私有的(所有类都有构造方法,不编码则系统默认生成空的构造方法,若有显示定义的构造方法,默认的构造方法就会失效),然后在一个public的实例化函数中调用私有构造函数,完成仅有的一次实例化。 3、优缺点分析...
阅读全文
摘要:一、意图 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 二、核心思想 三、优缺点分析 GOOD: (1)最大的好处是易于交换产品系列,由于具体工厂类在一个应用中只需要初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。如ACCESS->SQL SERVER; (2)第二大好处是:它让具体的创建...
阅读全文
摘要:1、意图 迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 2、核心思想 3、优缺点分析 适用情况: (1)当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式 (2)当需要对聚集有多种方式遍历时,可以考虑使用迭代器模式 GOOD: 提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示。 为遍历不同的聚...
阅读全文
摘要:1、意图 组合模式:将对象组合成树形结构以表示“部分——整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性 2、优缺点分析 GOOD:整体和部分可以被一致对待(如WORD中复制一个文字、一段文字、一篇文章都是一样的操作) 用户不用关心到底是处理一个叶结点还是处理一个组合组件,也就不用为定义组合而写一些选择判断语句,即用户可以一致的使用组合结构和单个对象。 适用情况:当需求中是...
阅读全文
摘要:1、意图 在不破坏封装的条件下,将一个对象的状态捉住,并在该对象外部保存这个状态,从而可以在将来合适的时候把这个对象还原到存储起来的状态。 2、核心思想 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。 3、优缺点分析 适用于功能比较复杂的,但需要记录或维护属性历史的类;或者需要保存的属性只是众多属性中的一小部分时Originator可以根据保存的Memo还原到前一状态。 4、标准UM...
阅读全文
摘要:1、意图 把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不兼容而无法一起工作的两个类能够一起工作。 2、优缺点分析 适用情况:当系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。 3、标准UML图 1)类适配器模式(基于多重继承) 2)对...
阅读全文
摘要:1、意图 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 2、核心思想 状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去像是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的...
阅读全文
摘要:1、意图 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 2、核心思想 将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。 即用户就只需要指定需要建造的类型就可以得到产品,而具体的建造过程和细节就不需要知道了。 建造模式可以强制实行一种分步骤...
阅读全文
摘要:1、意图 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 2、核心思想 外部与一个子系统的通信必须通过一个统一的外观对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个外观类,而且此外观类只有一个实例,也就是还说它是一个单例模式。但整个系统可以有多个外观类。 3、优缺点分析 GOOD: 为子系统的一...
阅读全文
摘要:一、基本概念 迪米特法则:如果两个类不直接通信,那么这两个类就不应当发生直接的相互作用。如果一个类需要调用另一个类的某个方法的话,可以通过第三个类转发这个调用。 二、核心思想 在类的结构设计上,每一个类都应该尽量降低成员的访问权限。也就是说:一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。 迪米特原则的根本思想:强调了类之间的松耦合。 类之间的耦合越弱,越有利...
阅读全文
摘要:1、意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。template method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 2、核心思想 模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子类的形式实现,然后声明一些抽象方法来迫使子类剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑...
阅读全文

浙公网安备 33010602011771号