补充:算法
继承:父类和子类之间共享数据和方法的机制,一个父类能够有多个子类,父类描述了这些子类的公共属性和方法,一个子类能够继承它的父类中的属性和方法,这些属性和操做在子类中没必要定义,子类中还能够定义本身的属性和方法。shell
多态:在收到消息时,对象要给予响应,不一样的对象收到同一消息能够产生彻底不一样的结果设计模式
参数多态:一个类型是另外一个类型的子类型数据结构
过载多态:同一个名字在不一样的上下文中所表明的含义不一样ide
静态绑定:在编译时进行的工具
动态绑定:在运行时进行的,当一个对象发送消息请求服务时,要根据接收对象的具体状况将请求的操做与实现的方法进行链接测试
重置/覆盖:在子类中从新定义父类中已经定义的方法,其基本思想是经过一种动态绑定机制的支持,使得子类在继承父类接口定义的前提下用适合本身要求的实现去置换父类中的相应实现ui
重载:一个类能够具备多个同名而参数类型列表不一样的方法,每一个方法实现本身的特定行为spa
抽象工厂(Abstract Factory):设计
① 意图:
提供一个建立一系列相关或相互依赖对象的接口,而无须指定它们具体的类
②模式适应于:
例:
使用一个汽车生产来作例子。抽象工厂模式以下:
有一个抽象工厂类名为Factory,工厂的做用是生产车的不一样部件。
有一个奔驰工厂BenzFactory继承了这个Factory,专门用来生产奔驰车的部件。
有一个奔驰工厂BMWFactory继承了这个Factory,专门用来生产宝马车的部件。
有一个消费者类Consumer,专门组装这些工厂生产的部件。
Class Factory { public: virtua Car* createCar();//生产车 virtua Wheel* createWheel();//生产轮子 Shell* Wheel* createShell();//生产车壳 virtua Engine* createEngine();//生产引擎 } Class BenzFactory:public Factory//奔驰工厂 { BenzCar* createCar();//生产奔驰车 Wheel* createWheel();//生产奔驰轮子 Shell* createShell();//生产奔驰车壳 Engine* createEngine();//生产奔驰引擎 } Class BMWFactory:public Factory//宝马工厂 { BMWCar* createCar();//生产宝马车 Wheel* createWheel();//生产宝马轮子 Shell* createShell();//生产宝马车壳 Engine* createEngine();//生产宝马引擎 } class Consumer { Car* createCar(Factory * factory) { auto car= factory->createCar(); auto wheel= factory->createWheel(); auto shell= factory->createShell(); auto engine= factory->createEngine(); //一大堆组装过程,这里用户得本身处理 wheel->check();//轮胎检查 shell->check();//车壳检查 shell->setColor();//车壳上漆 engine->check();//引擎检查 car->add(wheel); car->add(shell); car->add(engine); return car; } }
生成器(Builder):
①意图:
将一个复杂对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示
②模式适用于:
工厂方法(Factory Method):
①意图
定义一个用于建立对象的接口,让子类决定实例化哪个类。Factory Method使一个类的实例化延迟到其子类
②模式适用于:
原型(Prototype):
①意图:
用原型实例指定建立对象的种类,而且经过复制这些原型建立新的对象
②模式适用于:
单例(Singleton):
①意图:
保证一个类仅有一个实例,并提供一个访问它的全局访问点
②模式适用于:
适配器(Adapter):
①意图:
将一个类的接口转换成客户但愿的另外一个接口。Adapter模式使得本来因为接口不兼容而不能一块儿工做的那些类能够一块儿工做
②模式适应于:
桥接(Bridge):
①意图:
将抽象部分与其实现部分分离,使它们均可以独立地变化
②模式适用于:
有许多类要生成的类层次结构。
组合(Composite):
①意图:
将对象组合成树形结构以表示“部分-总体”的层次结构。Composite使得用户对单个对象和组合对象的使用具备一致性
②模式适用于:
但愿用户忽略组合对象与单个对象的不一样,用户将统一地使用组合结构中的全部对象。
装饰(Decorator):
①意图:
动态地给一个对象添加一些额外的职责。就增长功能而言,Decorator模式比生成子类更加灵活
②模式适用于:
当不能采用生成子类的方式进行扩充时。一种状况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增加。另种状况多是,因为类定义被隐藏,或类定义不能用于生成子类。
外观(Facade):
①意图:
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
②模式适用于:
要为一个复杂子系统提供一个简单 接口时,子系统每每由于不断演化而变得愈来愈复杂。大多数模式使用时都会产生更多更小的类,这使得子系统更具备可重用性,也更容易对子系统进行定制,但也给那些不须要定制子系统的用户带来一些使用上的困难。Facade能够提供一个简单的默认视图,这一视图对大多数用户来讲已经足够,而那些须要更多的可定制性的用户能够越过Facade层。
客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其余的子系统分离,能够提升子系统的独立性和可移植性。
当须要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。
若是子系统之间是相互依赖的,则可让它们仅经过Facade进行通讯,从而简化了它免谢点们之间的依赖关系。
享元(Flyweight):
①意图:
运用共享技术有效地支持大量细粒度的对象
②模式适用于:
彻底因为使用大量的对象,形成很大的存储开销。
对象的大多数状态均可变为外部状态。
代理(Proxy):
①意图:
为其余对象提供一种代理以控制对这个对象的访问
②模式适用于:
虚代理(Virtual Proxy)根据须要建立开销很大的对象。
责任链(Chain of Responsibility):
①意图:
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止
②模式适用于:
命令(Commnd):
①意图:
将一个请求封装为一个对象,从而使得能够用不一样的请求对客户进行参数化:对请求排队或记录请求日志,以及支持中可撤销的操做。
②模式适用于:
抽象出待执行的动做以参 数化某对象。Command模式是过程语言中的回调机制的一个面向对象的替代品。
在不一样的时刻指定、 排列和执行请求。一个 Command 对象能够有一个与初始请关的生存期。若是一个请求的接收者可用一种与地址空间无关的方式表达,那么就能够将负责该请求的命令对象传递给另外一个不一样的进程并在那儿实现该请求。
支持取消操做。 Command的Excute操做可在实施操做前将状态存储起来,在取治家
做时这个状态用来消除该操做的影响。Command接口必须添加一个Uece:操做可经过向后和向前遍历这一列表并分别调用Uexecute和Execute来实现重数不限的该操做取消上一次Excute 调用的效果。执行的命令被存储在一个历史列表中。取消
和“重作”。
支持修改日志。这样当系统崩溃时,这些修改能够被重作遍。 在Command接口中添加装载操做和存储操做,能够用来保持变更的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中从新读入记录下来的命令并用Execute操做从新执行它们。
用构建在原语操做上的高层操做构造一个系统。 这样一种结构在支持事务(Transaction)的信息系统中很常见。Command模式提供了对事务进行建模的方法。Command有一个公共接口,使得能够用同一种方式调用全部的事务,同时使用该模式也易于添加新事务以扩展系统。
解释器(Interpreter):
①意图:
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
②模式适用于:
该文法简单。对于复杂的发文,文法的类层次变得庞大而没法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无须构建抽象语法树便可解释表达式,这样能够节省空间还可能节省时间。
迭代器(Iterator):
①意图:
提供种方法顺序访问一个聚合对象中的各个元素,且不须要暴露该对象的内部表示
②模式适用于:
访问一个聚 合对象的内容而无须暴露它的内部表示。
支持对聚合对象的多种遍历。
中介者(Mediator):
①意图:
用一个中介对象来封装系列的对象交互。 中介者使各对象不须要 显式地相互引用, 从而使其耦合松散,并且能够独立地改变它们之间的交互。
②模式适用于:
一组对象以定义良好可是复杂的方式进行通讯,产生的相互依赖关系结构混乱且难以理解。
备忘录(Memento):
①意图:
在不破坏封装性的前提下捕获一个对象的内部状态,并在对象以外保存这个状态。这样以能够将对象恢复到原先保存的状态。
②模式适用于:
必须保存一个对象在某一个时刻的 (部分)状态,这样之后须要时它才能恢复到先前的状态。
观察者(Observe):
①意图:
定义对象间的一种对多 的依赖关系, 当一个对象的状态发生改变时,全部依赖于它的对象都获得通知并被自动更新。
②模式适用于:
当一个抽象模型有两个方面,其中一个方面依赖于另外一个方面,将这二者封装在独立的对象中以使它们能够各自独立地改变和复用。
当对一个对象的改变须要同时改变其余对象,而不知道具体有多少对象有待改变时。
当一个对象必须通知其余对象,而它又不能假定其余对象是谁,即不但愿这些对象是紧耦合的。
状态(State):
①意图:
容许一个对象在其内部状态改变时改变它的行为。对象看起来彷佛修改了它的类。
②模式适用于:
一个对象 的行为决定于它的状态,而且它必须在运行时 刻根据状态改变它的行为。
一个操做中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态经常使用个或多个枚举常量表示。一般,有多个操做包含这相同的条件结构。State模式将每个条件分支放入个独立的类中。这使得开发者能够根据对象自身的状况将对象的状态做为一个对象,这对象能够不依赖于其余对象独立变化。
策略(Strategy):
①意图:
定义一系列的算法,把它们一个个封装起来,而且使它们能够相互替换。此模式使得算法能够独立于使用它们的客户而变化。
②模式适用于:
许多相关的类仅是行为有异。“策略"提供了一种用多个行为中的个行为来配置一个类的方法。
模板方法(templete Method):
①意图:
定义一个操做中的算法骨架,而将一些步 骤延迟到子类中。Template Method使得子类能够|不改变一个算法的结构便可重定义该算法的某些特定步骤。
②模式适用于:
一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
各子类中公共的行为应被提取出来并集中到一个公共父类中,以免代码重复。
控制子类扩展。模板方法旨在特定点调用“hook"操做(默认的行为,子类能够在必要时进行重定义扩展),这就只容许在这些点进行扩展。
访问者(Visitor):
①意图:
表示一个做用于某对象结构中的各元素的操做。它容许在不改变各元素的类的前提下定义做用于这些元素的新操做。
②模式适用于:
一个对象 结构包含不少类对象,它们有不一样的接口,而用户想对这些对象实施一一些依赖于其具体类的操做。
须要对个对象结构中的对象进行不少不一样的而且不相关的操做,而又想要避免这些操做“污染”这些对象的类。Visitor 使得用户能够将相关的操做集中起来定义在一个类中。当该对象结构被不少应用共享时,用Visitor模式让每一个应用仅包含须要用到的操做。
定义对象结构的类不多改变,但常常须要在此结构上定义新的操做。改变对象结构类须要重定义对全部访问者的接口,这可能须要很大的代价。若是对象结构类常常改变,那么可能仍是在这些类中定义这些操做较好。