zoukankan      html  css  js  c++  java
  • 《大话设计模式》笔记(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、安全代理

     

     

  • 相关阅读:
    spring reference
    Connector for Python
    LDAP
    REST
    java利用泛型实现不同类型可变参数
    java细节知识
    事务隔离的级别
    servlet cdi注入
    session and cookie简析
    CORS’s source, principle and implementation
  • 原文地址:https://www.cnblogs.com/Lau7/p/8350940.html
Copyright © 2011-2022 走看看