设计模式
文章平均质量分 53
zuimei_forver
这个作者很懒,什么都没留下…
展开
-
设计模式之装饰模式
定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。角色:对象接口(Component):可以用来动态添加职责的对象;具体对象(ConcreteComponent):具体的对象,可以给这个对象添加一些职责。(如果对象不需要扩展,具体对象就不需要了)装饰抽象类(Decorator):继承自Component,从外类来扩展Component类的功能。原创 2015-12-18 09:35:04 · 317 阅读 · 0 评论 -
设计模式之备忘录模式
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。角色:发起人(Originator):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。备忘录(Me原创 2015-12-21 10:14:10 · 337 阅读 · 0 评论 -
设计模式之组合模式
定义:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。角色:Component:为组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component的子部件。Leaf:在组合中表示叶结点对象,叶结点没有子节点。Composite:定义有枝节点行为,用来存储子部件,在Co原创 2015-12-21 10:34:58 · 423 阅读 · 0 评论 -
设计模式之迭代器模式
定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。角色:迭代抽象类:用于定义得到开始对象,得到下一个对象、判断是否到结尾、当前对象等抽象方法,统一接口。具体迭代器类:继承迭代抽象类,实现开始、下一个、是否结尾、当前对象等方法。聚集抽象类:有一个创建迭代器的接口;具体聚集类:继承自聚集抽象类,实现创建迭代器的接口。UML图:原创 2015-12-22 09:30:25 · 374 阅读 · 0 评论 -
设计模式之单例模式
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。角色:单例类:由私有静态实例对象、私有化的构造函数和静态获取实例函数三部分组成。UML图:总结:单例模式因为Singleton类封装它的唯一实例,这样他就可以严格地控制客户怎样访问它以及何时访问它。就是对唯一实例的受控访问。原创 2015-12-22 09:45:37 · 302 阅读 · 0 评论 -
简单工厂模式、工厂模式以及抽象工厂模式
简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别结合简单示例和UML图,讲解工厂模式简单原理。 一、引子话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上 Audi后他说“开奥迪车!”。你转载 2015-12-04 13:32:59 · 465 阅读 · 0 评论 -
设计模式之桥接模式
定义:将抽象部分与它的实现部分分离,使他们都可以独立地变化。UML图:总结:桥接模式中使用到了合成/聚合复用原则(尽量使用合成/聚合,尽量不要使用类继承)。聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期是一样的。合成/聚合复用原则的好处是,优原创 2015-12-23 10:27:11 · 336 阅读 · 0 评论 -
设计模式之命令模式
定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。角色:抽象命令类(Command):用来声明执行操作的接口;具体命令类(ConcreteCommand):将一个接收者对象绑定于一个动作,调用接收者相应的操作;命令调用者(Invoker):要求该命令执行这个请求;命令接收者(Receiver):知原创 2015-12-23 11:10:19 · 253 阅读 · 0 评论 -
设计模式之中介者模式
定义:用一个中介对戏那个来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。角色:抽象同事类(Colleague):对交互对象的抽象具体同事类(ConcreteColleague):每个具体同事类只知道自己的行为,而不了解其他同事类的情况,但都认识中介者对象抽象中介者(Mediator):定义了同事对象到中介者原创 2015-12-24 09:20:20 · 264 阅读 · 0 评论 -
设计模式之适配器模式
定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。角色:Target:客户所期待的接口,可以是具体或抽象的类,也可以是接口。Adaptee:需要适配的类;Adapter:通过在内部包装一个Adaptee对象,把源接口转换成目标接口。UML图:总结:当两个类都不容易修改的时原创 2015-12-21 09:59:37 · 265 阅读 · 0 评论 -
设计模式之职责链模式
定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。角色:抽象处理者:定义一个处理请示的接口。具体处理者:处理它所负责的请求,可访问它的后继者,如果可以处理请求,就处理;否则,将该请求转发给它的后继者。UML图:总结:职责链模式使得接收者和发送者原创 2015-12-21 09:49:57 · 304 阅读 · 0 评论 -
设计模式之代理模式
定义:为其他对象提供了一种代理,以控制对这个对象的访问。角色:抽象实体类(Subject):定义了实体类和代理的公用接口;实体类(RealSubject):需要控制访问的实体对象即代理的对象;代理类(Proxy):控制对实体的访问,在代理类中保存一个对实体的引用,以便调用实体对象的接口。UML图:适用场景:1.远程代理:为一个对象在不同的地址空间提供局部原创 2015-12-18 21:01:06 · 356 阅读 · 0 评论 -
设计模式之原型模式
定义:用原型实例指定创建对象的种类,并且通过拷贝这些对象创建新的对象。角色:原型类(Prototype):声明一个克隆自身的接口;具体原型类:继承自原型类,实现原型类的克隆接口。UML图:注:原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。但是在使用原型模式时,需要注意浅复制与深复制的问题。如果字段是值类型的,则对该字段执行逐位复制;原创 2015-12-19 13:31:49 · 241 阅读 · 0 评论 -
设计模式之模板方法模式
定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。角色:抽象类:就是抽象模板,定义并实现了一个模板方法。给出了顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类中实现。具体类:实现父类所定义的一个或多个抽象方法。UML图:总结:模板方法模式就是通过把不变行为搬到超类,原创 2015-12-19 14:10:25 · 215 阅读 · 0 评论 -
设计模式之外观模式
定义:外观模式又称为门面模式,它为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。角色:外观类(Facade):保存对子系统的引用,将客户的请求代理给适当的子系统对象。子系统类:处理外观类指派的任务,子类中是没有外观类的引用。UML图:总结:外观模式避免了客户端直接与子系统的交互,使用外观类作为中间协调者,这符合了原创 2015-12-19 14:58:32 · 239 阅读 · 0 评论 -
设计模式之六大原则
1. 单一职责原则就一个类而言,应该仅有一个引起变化的原因。即一个类只负责一项职责。职责扩散:因为某种原因,职责p被分化为粒度更细的职责p1和p2,就可以会违背单一职责原则。遵循单一职责原则的优点:可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多。提高类的可读性,提高系统的可维护性;变更引起的风险降低,变更是必然的。如果单一职原创 2015-12-19 15:00:57 · 258 阅读 · 0 评论 -
设计模式之建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。角色:抽象构建者(Builder):为创建一个对象的各个部件指定的抽象接口。具体构建者(ConcreteBuilder):实现Builder接口,构造和装配各个部件。具体产品(Product):创建的复杂对象。UML图:总结:建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的原创 2015-12-20 15:16:08 · 259 阅读 · 0 评论 -
设计模式之观察者模式
定义:观察者模式又称为发布-订阅模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。角色:抽象通知者(Subject):把所有对观察者的引用保存在一个聚集里,每个通知者都可以有任意数量的观察者。抽象观察者一般用一个抽象类或接口实现,同时有增加和删除观察者对象的方法。具体通知者原创 2015-12-20 15:38:54 · 314 阅读 · 0 评论 -
设计模式之状态模式
定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。角色:抽象状态类:定义了一个接口以封装与Context的一个特定状态相关的行为。具体状态类:实现一个与Context状态相关的行为。Context类:维护一个具体状态类实例,这个实例定义了当前的状态。UML图:总结:状态模式主要解决的是当控制一个对象状态转换的条原创 2015-12-21 09:34:28 · 273 阅读 · 0 评论 -
设计模式之享元模式
定义:运用共享技术有效地支持大量细粒度的对象。角色:抽象享元类(Flyweight):所有具体享元类的超类或接口,通过这个接口,Flyweight可以接受并作用于外部状态。具体享元类(ConcreteFlyweight):继承Flyweight超类或实现Flyweight接口,并为内部状态增加存储空间。不共享具体享元类(UnsharedConcreteFlyweight原创 2015-12-24 09:41:10 · 374 阅读 · 0 评论