zoukankan      html  css  js  c++  java
  • 设计模式:代理模式/中介者模式 / 桥接模式/适配器

    模式某种角度上来讲就是对象组合。不要看他们都是对象组合就好像是一样的。模式的动机,意图,使用场合,组合方式,这些都是模式的一部分。其中细微的不同足以区分不同的模式. 行为模式的主要特点就是处理的是对象之间的通信方 式,往往是通过引入中介者对象将通信双方解耦,在这里实际上就是将Context与实际的算法提供者解耦。

           

               

                 

    代理模式特点:(结构型模式)

     1. 一对一,这个代理只能代表一个对象;

     2. 只能代理一方,也就是 PB 是B的代理,A能够通过PB访问B,但是B不能通过PB访问A;

    中介者模式:  (行为型模式) 

     1. 多对多,这些被管理的对象之间都可以通信,它们的业务关系应该是交织在一起的;

     2. A能够通过中介访问B,B也能够通过中介访问A;

    3.中介者模式是用一个中介对象来封装一系列同事对象的交互行为。外观模式是对子系统提供统一的接口, 

    桥接模式:

    1. 一对多的关系,一个类可以有很多其他属性;

    2. 桥接夸大不是对象之间的通信,而是拥有某些属性; 

    代理模式、外观模式、适配器模式三者区别:

     1、代理与外观:代理对象代表一个单一对象,而外观对象代表一个子系统。代理的客户对象无法直接访问目标对象,由代理提供对单独的目标对象的访问控制,而外观的客户对象可以直接访问子系统中的各个对象,但通常由外观对象提供对子系统各元件功能的简化的共同层次的调用接口。

     2、代理与适配器:代理与适配器都属于一种衔接性质的功能。代理是一种原来对象的代表,其他需要与这个对象打交道的操作都与这个代表交涉。而适配器则不需要虚构出一个代表,只需要为应付特定使用的目的,将原来的类进行一些组合。

     3、外观与适配器:外观与适配器都是对现存系统的封装。外观定义的新的接口,而适配器则是复用一个原有的接口。适配器是使两个已有的接口协同工作,而外观则是为现存系统提供一个更为方便的访问接口。如果硬要说外观是适配,那么适配器是用来适配对象的,而外观是用来适配整个子系统的。也就是说,外观所针对的对象的粒度更大。

     三者的相同点

     这三个模式的相同之处是,它们都作用于用户与真实被使用的类或系统之间,作一个中间层,起到了让用户间接地调用真实的类的作用。

     总结

     1、代理模式,代理者保存一个被代理的一个对象;适配器模式,保存了一个被适配的对象;而外观模式,就保存了各个子系统对象,然后根据实际逻辑组合。

     2、代理模式提供与真实的类一致的接口,意在用代理类来处理真实的类,实现一些特定的服务或真实类的部分功能,外观模式注重简化接口,适配器模式注重转换接口

    代理模式

     个人理解:

              代理模式是将原类进行封装,客户端只需要与代理进行交流。代理就是原类的一个替身。简而言之就是用一个对象代表另外一个对象。强调的是个体。

     中介者模式

         定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互

     使用中介者模式的场合

     1.一组定义良好的对象,现在要进行复杂的通信。

     2.定制一个分布在多个类中的行为,而又不想生成太多的子类。

     可以看出,中介对象主要是用来封装行为的,行为的参与者就是那些对象,但是通过中介者,这些对象不用相互知道。 

    使用中介者模式的优点: 

    1.降低了系统对象之间的耦合性,使得对象易于独立的被复用。

     2.提高系统的灵活性,使得系统易于扩展和维护。 

    使用中介者模式的缺点: 

    中介者模式的缺点是显而易见的,因为这个“中介“承担了较多的责任,所以一旦这个中介

    对象出现了问题,那么整个系统就会受到重大的影响    

     装饰模式与代理模式的对比:

    在代理类和装饰类中,我们都定义了一个额外的方法,这个方法在装饰类中我们叫装饰的方法,在代理类中我们称它为特别的处理.总的来说他们实现的效果就是在真正的业务执行之前要执行的业务.

     而他们的不同之处就是装饰者是通过注入的方式来添加装饰类,它更具有灵活性,而代理类是被固化了,也就是说一个代理类理论上只能代理一个类    

  • 相关阅读:
    技术收集
    Entity Framework的扩展库
    暂时收集
    php 处理高并发的思路
    nginx缓存优先级(缓存问题者必看)
    mysql5.5主从配置
    php源码编译常见错误解决方案
    今天开始要改变模式了
    nrpe 在ubuntu上安装遇到的问题
    zendstudio 10下载汉化
  • 原文地址:https://www.cnblogs.com/7star/p/13958357.html
Copyright © 2011-2022 走看看