Design Pattern
GeorgeWang1994
Game Developer and Mobile Developer
展开
-
原型模式,建造者模式,桥接模式
同样的,今天就介绍三种模式;先从第一种模式开始讲起,原型模式;用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,原型模式要解决的问题是不用重新初始化对象,而是动态的获取对象运行时的状态,你只需要对对象做部分属性或行为的修改;原型模式实现的关键是实现Clone函数,对于c++来说,其实就是拷贝构造函数,需要实现深拷贝;看代码://父类class Resume原创 2015-11-01 03:53:50 · 919 阅读 · 0 评论 -
适配器模式 详解
定义将一个类转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作; 创建型模式角色目标接口(Flyweight):客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口;需要适配的类(Adaptee):需要适配的类或适配者类;适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口;适用场景已经存在的类的接口不符合我们的需求;原创 2016-07-02 17:33:41 · 414 阅读 · 0 评论 -
命令模式 详解
定义旨在将方法调用、请求或操作封装到单一对象中,从而根据我们不同的请求对客户进行参数化和传递可供执行的方法调用。此外,这种模式将调用操作的对象与知道如何实现该操作的对象解耦,并在交换出具体类(对象)方面提供更大的整体灵活性;它为我们提供了一种分离职责的手段,这些职责包括从执行命令的任意地方发布命令以及将该职责转而委托给不同对象; 创建类模式角色命令角色(Command):是一个抽象类,类中对原创 2016-07-02 21:34:58 · 512 阅读 · 0 评论 -
工厂模式 详解
定义定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类; 创建类模式角色抽象工厂角色(AbstractFactory):模式的核心,提供具体工厂角色必须实现的接口或者必须继承的父类;具体工厂角色(ConcreteFactory):含有和具体业务逻辑有关的代码,由应用程序调用以创建对应的具体产品的对象;抽象产品角色(AbstractProduct):原创 2016-07-04 00:57:28 · 521 阅读 · 0 评论 -
桥接模式 详解
定义将抽象部分与它的实现部分分离,是它们都可以独立地变化; 结构型模式角色抽象化角色(Abstaction):定义抽象接口,拥有一个Implementor类型对象引用;重定义抽象化角色(RefinedAbstraction):扩展Abstraction中的接口定义;实现化角色(Implementor): 实现化的接口;具体实现化角色(ConcreteImplementor): 实现实现原创 2016-07-05 00:53:24 · 1227 阅读 · 0 评论 -
责任链模式 详解
定义是一种对象的行为模式,在责任链模式里,很多对象由每个对其下家的引用而连接起来形成的一条链,请求在这个链上传递,直到链上的某一个对象决定处理此请求,发出这个请求的客户端并不知道链上的哪一个对象最终会处理这个请求; 行为型模式角色抽象处理者角色(Handler):定义处理请求的接口;抽象处理者角色(ConcreteHandler):具体处理者接到请求后,可以选择处理该请求或者传递给下家;原创 2016-07-15 00:51:05 · 574 阅读 · 0 评论 -
备忘录模式 详解
定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态; 行为型模式角色发起人角色(Originator):记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据;备忘录角色(Memento):负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态;管理者角色(Caretaker):对备忘录 进行管理,保存和提供备忘录;从网原创 2016-07-16 14:11:05 · 524 阅读 · 0 评论 -
中介者模式 详解
定义是一个行为设计模式,它允许我们公开一个统一的接口,系统的不同部分可以通过该接口进行通信,而不需要显示的相互作用;适用场景如果一个系统的各个组件之间看起来有太多的直接关系,这个时候则需要一个中心控制点,以便各个组件可以通过这个中心控制点进行通信; 该模式促进松散耦合的方式是:确保组件的交互是通过这个中心点来进行处理的,而不是通过显示的引用彼此;角色抽象中介者(AbstractMediato原创 2016-06-19 17:17:46 · 4158 阅读 · 1 评论 -
装饰者模式 详解
定义Decorator是一种结构型设计模式,旨在促进代码复用; 装饰者模式可以动态的给一个对象增加其他职责;就扩展功能来说,装饰者模式比生成子类更为灵活。角色抽象构件角色(AbstractComponent):定义对象的接口,可以给这些对象动态增加职责;抽象装饰角色(AbstractDecorator):维护一个指向Component实例的引用,并且定义了与Component一致的接口;具体原创 2016-06-20 19:28:39 · 525 阅读 · 0 评论 -
迭代器模式 详解
定义提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节; 行为型模式角色迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口;具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置;容器角色(Container): 容器角色负责提供创建具体迭代器角色的接口;具体容器角色(Concrete Co原创 2016-07-09 02:38:08 · 383 阅读 · 0 评论 -
组合模式 详解
定义将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性; 结构型模式角色抽象构件角色(Component):组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理,;部分构件角色(Leaf):没有子节点,实现抽象构件角色的接口;组合构件角色(Composite): 有子节点,实现抽象构件的角色声原创 2016-07-09 15:57:33 · 435 阅读 · 0 评论 -
代理模式 详解
定义代理模式是对象的结构模式,代理模式给某一个对象提供一个代理对象,并由代理对象控制原对象的引用; 行为型模式角色抽象对象角色(AbstractObject):声明了目标对象和代理对象的共同接口,任何可以使用目标对象的地方都可以使用代理对象;目标对象角色(RealObject):定义了代理对象所代表的目标对象;代理对象角色(ProxyObject):代理对象内部含有目标对象的引用,从而可原创 2016-07-14 02:03:51 · 448 阅读 · 0 评论 -
代码设计 六大原则
单一职责原则 Single Responsibility Principle定义:一个类或者一个接口,最好只负责一项职责。问题由来:类T负责两个不同的职责P1和P2。由于职责P1需要发生改变而需要修改T类,就有可能导致原来运行正常的职责P2功能发生故障。解决方法:遵循单一职责原则。分别建立新的类来对应相应的职责;这样就能避免修改类时影响到其他的职责; 当遇到职责扩散的时候,在逻辑足够简单的时候,原创 2016-07-02 02:13:22 · 16278 阅读 · 0 评论 -
工厂模式,策略模式,适配器模式
今天一下介绍三种设计模式,这样面试的时候就不怕被问了!首先是工厂模式,工厂模式分为简单工厂模式,工厂方法模式,抽象工厂模式;1,简单工厂模式,他的主要的特点是需要在工厂中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类。以怪兽来做例子: enum MonsterType {MonsterTypeA, MonsterTypeB};class Monster{p原创 2015-11-01 02:43:47 · 942 阅读 · 0 评论 -
策略模式 详解
定义Strategy定义了一系列的算法,并且将每个算法封装来,而且使它们还可以相互替换;策略模式让算法独立于使用它的客户而独立变化;角色环境类(Context):用一个ConcreteStrategy对象来配置,维护一个对Strategy对象的引用,可定义一个接口来让Strategy访问它的数据;抽象策略类(AbstractStrategy):定义所有支持的算法的公共接口。Context使用这个原创 2016-06-21 13:22:12 · 445 阅读 · 0 评论 -
外观模式 详解
定义为子系统中的一组接口提供一个统一的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。角色外观角色(Facade):在客户端可以调用它的方法,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任;在正常的情况下,它将所有从客户端发来的请求委派到相应的子系统,传递给相应的子系统对象处理;子系统角色(Subsystem classes):通常有一到多个子系统角色,每一个原创 2016-06-26 00:52:26 · 453 阅读 · 0 评论 -
建造者模式 详解
定义是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 创建类模式角色建造者角色(Product):给出一个抽象接口,以规范产品对象的各个组成部分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建;抽象建造者角色(ConcreteBuilder):实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。在创建过程完原创 2016-06-27 01:33:55 · 716 阅读 · 0 评论 -
观察者模式 详解
定义一个或多个观察者对目标的状态感兴趣,它们通过将自己依附在目标对象上以便注册所感兴趣的内容。目标状态发生改变并且观察者可能对这些改变感兴趣,就会发送一个通知消息,调用每个观察者的更新方法。当观察者不再对目标感兴趣的时候,它们可以简单的将自己从中分离。组成角色抽象目标角色(AbstractSubject)抽象观察者角色(AbstractObserver)具体目标角色(ConcreteS原创 2016-06-18 17:31:50 · 1374 阅读 · 1 评论 -
享元模式 详解
定义采用一个共享来避免大量拥有相同内容对象的开销;运用共享技术有效地支持大量细粒度的对象;(共享的对象必须是不可变的,不然一变则全变) 享元模式分为单纯享元模式和复合享元模式; 结构型模式角色抽象享元角色(Flyweight):此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口或抽象类。那些需要外部状态的操作可以通过方法的参数传入。抽象享元的接口使得享元变得可能,但是并原创 2016-06-28 07:14:06 · 536 阅读 · 0 评论 -
状态模式 详解
定义当一个对象在内在状态改变时允许改变其行为,这个对象看起来像是改变了其类; 行为型模式角色上下文环境(Context):定义了客户程序需要的接口并维护了一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理;抽象状态(State):定义了一个接口以封装使用上下文环境的一个特定状态相关的行为;具体状态(Concrete State): 实现抽象状态定原创 2016-07-10 18:11:22 · 469 阅读 · 0 评论 -
单例模式 详解
定义保证一个类仅有一个实例,并且提供一个访问它的全局访问点; (在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用) 创建型模式适用场景当类只有一个实例而且客户可以从一个众所周知的访问点访问它时;该唯一的实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时;实现代码var Singleton =原创 2016-07-01 00:34:05 · 298 阅读 · 0 评论 -
解释器模式 详解
解释器模式 详解定义给定一种语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子; 行为型模式角色上下文环境(Context):一般用来存放文法中各个终结符所对应的具体值;抽象表达式(Expression):声明一个所有的具体表达式角色都需要实现的抽象接口,这个接口主要是interpret方法,称作解释操作;终结符表达式(Terminal Expressio原创 2016-07-12 08:27:10 · 362 阅读 · 0 评论 -
原型模式 详解
定义用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象; 创建型模式 浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值; 深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值;角色抽象原型类(Prototype):抽象原型类,声明克隆自身的接口;具体原型类(ConcreteProt原创 2016-07-20 00:57:45 · 602 阅读 · 0 评论