中介模式和外观模式
中介模式:A类和B类是相互调用关系,通过中介模式解耦
外观模式:对其他类提供统一的接口服务,客户端调用一个接口,外观类负责调用众多类来实现该服务
装饰模式和外观模式
装饰模式是为了增强服务,例如:一辆汽车—>整合(装饰)飞翔功能à一辆会飞的汽车à再整合(装饰)喷水功能à一辆会边飞边喷水的汽车
new WaterJet(new Flyable(new Car()))
外观模式则是为了简化服务,对外提供一个入口服务,对外隐匿业务细节。
代理模式和装饰模式
代理模式中,代理类和被代理类都实现同一接口,代理类旨在控制被代理类是否执行或者指向前后是否附加额外的行为(例如:操作日志),被代理类对外无感知。
装饰模式中,装饰类和被装饰类也都实现同一接口,但是被装饰类及其对象是由客户端决定的。另外参考第2点中对装饰模式的解释。
享元模式
为了减少系统创建的开销,将范围相对固定的所有对象放在池子中,客户端各取所需以达到资源复用。
注意事项:需要考虑线程安全机制,一般需要一个工厂类加以控制
桥接模式和策略模式
桥接模式:是一种结构型设计模式;两种具有属性关系或者互为属性关系的类(A、B),例如:四方形具有颜色属性,那么将A抽象出一个抽象类(C),成员B也放入抽象类中并开放一个setter接口由外部提供属性对象。这样A、B两个类的具体实现互不相干,降低了A、B之间的耦合度。A、B的种类可以任意增加。
策略模式:是一种行为型的模式,而且只涉及一个策略类,另外提供一个统一的类负责策略的执行;同样的也是策略类对象由客户端创建。
策略模式和装饰模式
装饰模式是有继承关系的,而且属于增强型;策略模式没有继承关系,属于选择性的模式,不改变策略类的执行;
观察者模式和访问者模式
访问者模式是将服务类对象作为稳定的数据结构类的操作函数的参数,对于服务类的执行由结构类负责调用,调用时结构类对象将自己传给服务类。此种模式适用于数据结构比较稳定而经常需要添加操作类型的情况。更通俗点来说,访问者模式适用于结构比较稳定的几种,而任何一个结构可能对应多种行为操作的情况,用访问者模式更有利于添加行为处理。
观察者模式是将所有需要对被观察者对象的变化做出反应的类(观察者)对象注册到被观察者对象中,在被观察者的变化的地方主动通知每个订阅者。
区别已经很明显了
建造者模式、抽象工厂、工厂方法
建造者用来创建一个复杂的对象,不是调用一次就结束,例如StringBuilder。
简单工厂:单一工厂
工厂方法:将各类工厂抽象成一个抽象类,各类工厂实现该抽象类,类似零件生产工厂
抽象工厂:抽象工厂是将多个工厂方法集合起来,组合生产新的一个产品,类似dell工厂
工厂一般只负责new出来,不关注细节,而建造者虽然对外隐藏了复杂的构建过程,但是建造者本身是需要根据使用者的要求一步一步构建出使用者所需要的产品。
组合模式
数据结构采用树形结构,对元素进行抽象,外界不需要关心要处理的是单一构建还是父构件。可以更容易地加新的构件。
状态模式
针对不同状态执行不同的处理过程,将操作职责交给相应操作状态类负责。
命令模式和装饰模式
装饰者模式中component被装饰后依然是component(因为采用了继承的方式),同时为了达到可以方便的真实去装饰具体其他component,所以需要传入被装饰的component实例(这里采用了组合方式)。而命令模式却不同,发出命令者和执行命令者并不是同一类(没有继承关系),都是通过组合实现的,发出命令者和命令真实执行者被这个command彻底隔离,其实也可以看作真实执行者被command类包装了,或者说代理了。
命令模式和外观模式
命令模式需要由外部指定命令的实际执行对象,而外观模式隐藏了实际执行者。
责任链
链条类和责任类都实现同一个接口,同时接口函数至少包含两个参数(操作对象和链条对象);链条负责将操作对象继续往链条下一个节点传递执行,当职责对象完成职责后可以选择性地调用链条的职责使得链条得以继续往下执行职责。
适配器和外观模式
适配器是将一个接口转换成另外一个接口
外观模式将很一系列功能接口通过一定的业务规则将功能封装成一个接口给外部调用
迭代器
设计一个迭代类和一个集合类,其中迭代类包括hasNext、next函数以及集合类对象,而集合类则除了常规的集合操作之外,还需要有个iterator函数,返回迭代类对象(构造函数的参数为集合对象)
单例模式 原型模式 模板方法 解释器 备忘录
这几个模式比较不容易跟其它模式混淆,而且也比较容易理解