《大话设计模式》笔记(2)——结构型模式

 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、安全代理

 

 

posted @ 2018-01-25 14:02  Eric-Lau  阅读(152)  评论(0编辑  收藏  举报