`

备忘录模式,组合模式,迭代器模式,单例模式,桥接模式总结

阅读更多

备忘录模式,组合模式,迭代器模式,单例模式,桥接模式总结

 

备忘录模式(Memento): 在不破坏封装性的前提下,捕获一个对象

的内部状态,并在该对象之外保存这个状态。这样以后就可将该

对象恢复到原先保存的状态。

Originator(发起人):负责创建一个备忘录(Memento),用以记录当前

时刻它的内部状态,并可使用备忘录恢复内部状态。

Originator可根据需要决定Memento存储Originator的哪些内部

状态。

Memento(备忘录):负责存储Originator对象的状态,并可防止Originator

以外的其他对象访问备忘录Memento.备忘录有两个接口,

Caretaker只能看到备忘录的窄接口,它只能将备忘录传递给其他对

象。Originator能够看到一个宽接口,允许它访问返回到先前状态

所需的所有数据。

Caretaker(管理者):负责保存好备忘录Memento,不能对备忘录的

内容进行操作或检查。

要保存的细节给封装在了Memento中了,哪一天要更改保存的细节也不用影响客户端了。

那么这个备忘录模式都用在一些什么场合呢?

Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存

的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前

一状态。如果在某个系统中使用命令模式时,需要实现命令的撤销功能,那么命令模式

可以使用备忘录模式来存储可撤销操作的状态。使用备忘录可以把复杂的对象内部信息对其他的对象屏蔽起来。当角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原

-------------------------------------------------------------------

组合模式

整体与部分可以被一致对待

组合模式(Composite),将对象组合成树形结构以表示'部分-整体'的层次结构。

透明方式与安全方式

透明方式,也就是说在Component中声明所有用来管理子对象的方法,其中包括

Add,Remove等。这样实现Component接口的所有子类都具备了Add和Remove.这样

做的好处就是叶节点和枝节点对于外界没有区别,它们具备完全一致的行为接口。

但问题也很明显,因为Leaf类本身不具备Add(),Remove()方法的功能,所以实现

它是没有意义.

安全方式:也就是在Component接口中不去声明Add和Remove方法,那么子类的Leaf

也就不需要去实现它,而是在Composite声明所有用来管理子类对象的方法,

不过由于不够透明,所以树叶和树枝类将不具有相同的接口,客户端的调用

需要做相应的判断,带来了不便。

需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象

的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式。

组合模式这样就定义了包含基本对象,组合对象的类层次结构。基本对象可以被组合成更

复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去,客户代码中,

任何用到基本对象的地方都可以使用组合对象了。

用户是不用关心到底是处理一个叶节点还是处理一个组合组件,也就用不着为定义组合而

写一些选择判断语句了。组合模式让客户可以一致地使用组合结构和单个对象。

-------------------------------------------------------------------

迭代器模式

提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

当你需要访问一聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑

用迭代器模式。你需要对聚集有多种方式遍历时,可以考虑用迭代器模式。为遍历不同

的聚集结构提供如开始,下一个,是否结束,当前哪一项等统一的接口。

 

研究历史是为了更好地迎接未来

迭代器(Iterator)模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,

这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。

--------------------------------------------------------------------

单例模式

所有类都有构造方法,不编码则系统默认生成空的构造方法,若有显示定义的构造方法,

默认的构造方法就会失效。单例模式(Singleton),保证一个类仅有一个实例,并提供一个

访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止

你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以

保证没有其他实例可以被创建,并且可以提供一个访问该实例的方法。

单例模式因为Singleton类封装它的唯一实例,这样它可以严格地控制客户怎样访问它以

及何时访问它。简单地说就是对唯一实例的受控访问。

多线程单例和双重锁定(Double-Check Locking)。

静态初始化的方式是在自己被加载时就将自己实例化,所以被形象地称之为饿汉式单例

类,

在第一次被引用时,才会将自己实例化,所以就被称为懒汉式单例类。

--------------------------------------------------------------------

对象的继承关系是在编译时就定义好了,所以无法在运行进改变从父类继承的

实现。子类的实现与它父类有非常紧密的依赖关系,以至于以父类实现中的任何

变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来实现不适合

解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了

灵活性并最终限制了复用性。

合成/聚合复用原则(CARP),尽量使用合成/聚合,

尽量不要使用类继承。聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含

B对象,但B对象不是A对象的一部分;合成则是一种强的‘拥有’关系,体现了严格

的部分和整体的关系,部分和整体的生命周期一样。

合成/聚合复用原则的好处是,优先使用对象的合成/聚合将有助于你保持每个类被

封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能

增长为不可控制的庞然大物。

--------------------------------------------------------------------

桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。

什么叫抽象与它的实现分离,这并不是说,让抽象类与其派生类分离,因为这没有

任何意义。实现指的是抽象类和的派生类用来实现自己的对象。实现方式有多种,

其核心意图就是把这些实现独立出来。让它们各自地变化。

我的理解就是实现系统可能有角度分类,每一种分类都有可能变化,那么就把这种

多角度分离出来让它们独立变化,减少它们之间的耦合。

只要真正深入地理解了设计原则,很多设计模式其实就是原则的应用而已,或许在不

知不觉中就在使用设计模式了。

 

 

分享到:
评论

相关推荐

    基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等

    抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子模式、中介者模式、备忘录模式、...

    C++设计模式课件19_Memento_备忘录.pdf

    它们分别是单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式、命令模式、迭代器模式、中介者模式、备忘录模式、解释器模式、...

    精品源码 C# 27种设计模式源代码

    5 迭代器模式 5 适配器模式 5 原型模式 6 简单工厂模式 6 解释器模式 6 享元模式 7 桥接模式 7 状态模式 8 结构型模式总结 8 责任链模式 9 创建型模式总结 9 中介者模式 10 备忘录模式 10 行为型模式总结 11 访问者...

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象...4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

    《Java设计模式》电子课件01至21章(程细柱PDF)

    内容包括统一建模语言基础知识、面向对象设计原则、设计模式概述、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、...

    设计模式自己总结一句话描述

    行为型模式,共十一种: 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。

    《Java设计模式》详解

    内容包括统一建模语言基础知识、面向对象设计原则、设计模式概述、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、...

    设计模式-C++

    创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    23种设计模式项目实例

    创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    java常用数据结构及算法集锦

    备忘录模式 解释器模式 迭代器模式 状态模式 责任链模式 访问者模式 结构与算法 基础概念 稀疏数组与二维数组 队列和栈结构 单向链表和双向链表 排序与查找算法 二叉树与多叉树 应用场景 RSA算法签名验签流程 树...

    C#23种设计模式样例代码和UML图

    行为型模式(策略模式、 迭代器模式、原型模式、职责链模式、 模板方法、 命令模式、 解释器模式、 中介者模式、 访问者模式、 状态模式、 备忘录模式); 结构型模式(代理模式、桥接模式、适配器模式、外观模式、...

    java常用23中设计模式

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。

    Java23种设计模式可直接运行Demo

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。

    设计模式_源代码大全.zip

    备忘录模式 15.组合模式 16.迭代器模式 17.单例模式 18.桥接模式 19.命令模式 20.职责链模式 21.中介者模式 22.享元模式 23.解释器模式 24.访问者模式 ... 相关资料:...

    23种设计模式详解PDF

    设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): ...策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    lua设计模式总结

    创建型模式 1、简单工厂模式lua实现 ...5、迭代器模式lua实现 6、备忘录模式lua实现 7、命令模式lua实现 8、职责链模式lua实现 9、解释器模式lua实现 10、中介者模式lua实现 11、访问者模式lua实现

    unity-23种常见设计模式unity版

    总体来说设计模式分为三大类: 创建型模式:共五种:...行为型模式:共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    二十二种设计模式.pdf

    无水印、可复制版本 一、原型模式 二、单例模式 ...十五、迭代器模式 十六、备忘录模式 十七、中介者模式 十八、状态模式 十九、观察者模式 二十、策略模式 二十一、模板方法模式 二十二、访问者模式

    java设计模式示例

    java设计模式示例 创建型模式(5种):工厂方法模式,...行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    23种设计模式 -设计模式图解.7z

    23种设计模式的特点定义、优缺点、使用场景,源码中...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

Global site tag (gtag.js) - Google Analytics