7、适配器模式(Adapter)
定义:有时候也称包装样式或者包装,将一个类的接口适配成用户所期待的。它使得原本接口不兼容而不能一起工作的类可以一起工作。
UML:
PS:适配器模式算比较容易理解的,其实现主要是在适配器Adapter包装一个Adaptee,并向外部提供客户所需要规格的接口,而其该接口的实现就是调用源接口Adaptee.SpecificRequest()。
适配器模式是因为目标接口和源接口规格不匹配而设计的模式。
应用场景:.net中的DataAdapter就是DataSet与数据源间的适配器
8、桥接模式(Bridge)
定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
UML:
PS:定义中说将抽象与它的实现分离确实不好理解,拿上面UML图来说,我的理解是让ConcreteImplementor这个“实现”,与RefinedAbstraction这个”抽象“相分离,这样使得RefinedAbstraction中的Operation方法,可以灵活的切换成ConcreteImplementorA或ConcreteImplementorB的实现。
参考代码:
应用场景类比:手机软件的实现与具体品牌手机相分离。
9、组合模式(Composite)
定义:组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 "组合对象" 的含义。
UML:
PS:对于这个模式看书上的例子能够懂,但是感觉不知道如何应用到真实的环境中去。
应用场景类比:公司管理系统
10、装饰模式(Decorator)
定义:动态地给一个对象添加一些额外的功能。
UML:
PS:装饰类Decorator中定义了一个Component变量,使用具体装饰类ConcreteDecorator对一个对象进行装饰时,先设置装饰者中Component变量为被装饰对象ConcreteComponent,然后装饰者ConcreteDecorator在其内部方法Operation()对被装饰对象进行装饰。
被装饰对象ConcreteComponent无需知道装饰者Decorator的存在,装饰者ConcreteDecorator对Component动态添加功能。
应用场景类比:装扮——穿T恤、裤子、鞋等等。
11、外观模式(Facade)
定义:为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
UML:
PS:我觉得这就相当于我们常写的帮助类,把由一系列繁琐的步骤组合成一个方法,便于外部使用。
应用场景类比:炒股和投资基金
12、享元模式(Flyweight)
定义:运用共享技术有效的支持大量细粒度的对象。
UML:
PS:统一从FlyweightFactory中生成Flyweight对象,如果存在该对象就直接返回,否则就实例化,以减少实例化多个相同对象。享元对象不会随外部环境改变而改变的共享部分,则称为享元对象的内部状态,否则就是外部状态。在享元模式中,应该尽可能把外部状态移到类实例外面,在方法调用时再将它们传递进来,这样就可通过共享大幅度地减少单个实例的数目。
应用场景类比:建网站、围棋
13、代理模式(Proxy)
定义:为被代理对象提供一种代理,以控制对这个对象的访问。
UML:
PS:Subject类定义了被代理者RealSubject和代理Proxy共用的接口,这样代理者Proxy和被代理者RealSubject就拥有了相同的功能,代理者Proxy内部保存被代理者RealSubject的实例,这样代理者Proxy中的每个功能内部去调用被代理者RealSubject中相应的功能。
参考代码:
应用场景:WebService、安全代理