--------------------------------------------------------------构建类模式-----------------------------------------------------------------------
单例模式:
XXXXX
工厂模式(factory):
1.若一个产品类(product)的构建需要依赖若干个组件类(component),则将各个组件类的生产和组装过程封装在一个工厂类(factory)中,再由工厂类的createproduct()方法直接创建一个产品类
2.用于创建具有复杂依赖关系的类
建造者模式(builder):
1.若一个产品类(product)的构建需要依赖若干个组件类(component),则将各个组件类的生产过程封装在一个建造者类(builder)中,然后将各个组件类的组装过程封装的一个导演类(director)中,再由导演类的getProduct()方法直接创建一个产品类
2.用于创建具有更复杂依赖关系的类
---------------------------------------------------------------行为类模式---------------------------------------------------------------------
模板方法模式:
1.先写一个abstract class的父类,将主要的逻辑封装起来,再由各个子类extends这个父类,实现父类中定义的各个需方法,或重写父类中的方法。这个abstract class 包含三类方法,抽象方法(父类定义,子类实现),模板方法(父类定义,父类实现,子类不可重写),钩子方法(父类定义,父类实现,子类可重写)
2.父类一般由公司的大牛写,属于框架性质的类,其中不重要的方法由公司菜鸟在子类中重写
中介者模式:
1.若代码中各个类之间的交互呈网状结构,则新建一个中介者类,将各个类的交互都通过该中介者类来实现,从而使得代码中各个类之间的交互呈星形结构
2.不宜滥用
观察者模式
1.被观察者对象(subject)包含(has-a)一个观察者对象列表():Vector<Observer> obs。obs中的每一个 Observer对象包含一个update()方法,每当subject执行一些操作时,就依次调用这些Observer中的update()方法,Observer以此来对subject的操作做出反应。
2.是一种常用的事件触发机制
访问者模式:
1.
2.
命令模式
1.有一个调用者类(Invoker),内含有(has-a)一个命令类(command),命令类内含有(has-a)一个接受者类(receiver),若想执行接受者类里面的具体操作,则可调用命令类对接受者类内方法的包装方法,或可使用调用者类对命令类的方法的包装方法。
2.优点是把命令的调用者与执行者分开,使双方不必关心对方是如何操作的。
责任链模式:
1.责任链模式其实就是一个灵活版的if…else…语句,它就是将这些判定条件的语句放到了各个处理类中
2.
策略模式
1.有一个作为接口的策略类(IStrategy),然后又若干具体策略类实现这个接口,有一个语境类(context)包含了一个策略类,这个语境类可以封装具体策略类中的方法,从而调用这些方法。
2.优点:其实就是面向对象中的封装和多态。缺点:必须对客户端(调用者)暴露所有的策略类。
迭代器模式(重点):
1.
2.任意容器都有相应的迭代器。
备忘录模式
1.有一个原始类(Originator),配有一个备忘录类(memento),该备忘录类被一个备忘录管理类(Caretaker )包含。当原始类内的数据需要修改时,使用备忘录管理类将原始类中的数据拷贝到备忘录类中(使用Caretaker.setMemento()方法)。当需要恢复原始类内的数据时,使用原始类类将备忘录类中的数据拷贝到原始类中(使用originator.restoreMemento()方法)
2.对资源的消耗是比较严重的
状态模式
1.
2.
---------------------------------------------------------------结构类模式--------------------------------------------------------------------------
对象适配器模式
1.有一个用户期待接口(target),一个待适配接口(adaptee),一个适配器接口(adapter)。适配器接口中的方法用的是用户期待接口的方法名,内部调用的却是待适配接口的方法。
2.
桥接模式
1.有一个抽象类为实现类(Implementor),一个抽象类为接口类(Abstraction);有一些具体实现类(concreteImplementor)均继承自实现类。有一些优化接口类均继承自接口类。接口类有一个(has-a)实现类的成员。优化接口类均使用这个成员封装实现类中的各个方法。
2.用法:用户首先new一个特定的优化接口类,接着赋给它一个特定的具体实现类,即可使用。
装饰模式
1.增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。
2.修饰类必须和原来的类有相同的接口。
组合模式
1.有一个抽象类为组合部件类(Component),有一些叶子类(leaf)和合成部件类(Composite)均继承自组合部件类,使用统一的接口。叶子类和合成部件类(非叶节点)组成一棵树,对根节点调用某方法时,自动递归调用其全部子节点的该方法。
2.对复杂的组合类的调用和对简单类的调用实现了统一接口。
外观模式
1.有一些子系统类(subsysytem),有一个外观类(facade),外观类包含有(has-a)这些子系统的私有实例。外观类对这些子系统类的方法做了封装。当客户程序想要调用这些子系统类的方法时,就调用外观类的封装方法。
2.适用于分层结构的系统。