设计模式之代理模式

来源:互联网 发布:淘宝宝贝上传图片问题 编辑:程序博客网 时间:2024/06/05 22:59

设计模式--代理模式

     设计模式应该很重要在软件设计中,不管在Java还是android中,之前自己一直没有涉及到这一块,现在自己也来凑凑热闹,别见笑了,各位。

    代理模式proxy,说白了,代理二字吗。要有一个真正的生产者realSubject,然后才有代理商将产品卖给众多的消费者手中,这一过程就叫代理模式。所以很理解,那么用代码怎么去提现出来呢?(注意:代理模式也可以有众多 的代理商,不一定只有一个)

代理模式的三个组成部分:

       Abstract Subject:抽象主题-声明真实主题和代理主题共同的接口

       Real Subject:真实主题-真实的对象,需要被代理主题引用

       Proxy Subject:代理主题-因为ProxySubject引用了RealSubject,并且实现了跟RealSubject一样的接口,所以ProxySubject可以操作RealSubject,还可以提供一些附加操作


    借用了一个别人的例子吧,拿买房子来说。

    1. 抽象的部分接口或者是抽象类

     

public interface IHouse{     void getHouseInfo();       void signContract();       void payFees();  }

  这个接口部分就是连接Real 和Proxy的 桥梁所在,好好去体会,会什么要这个东西?

 2. 创建RealSubject ,某一个具体的房

public class House implements IHouse{      private final String TAG = House.class.getSimpleName();      private String name;      private double price;        public House(String name, double price){          this.name = name;          this.price = price;      }        @Override      public void getHouseInfo() {          System.out.print( "House Info- name:" + name + "  ¥:" + price);      }        @Override      public void signContract() {        <pre name="code" class="html"><pre name="code" class="html"><pre name="code" class="html"><pre name="code" class="html">System.out.print
(TAG, "Contract:" + name + " signed at" + new SimpleDateFormat("HH:mm:ss").format(SystemClock.uptimeMilli
} @Override public void payFees() { System.out.print(TAG, "Bill: name-" + name + " $-" + price); } }
它就是第一个抽象部分的实现者,然后接着我们需要去创建一个代理类,当然了由于代理不是真正实体类,所以代理类在构造方法中用了RealSubject,所以这才实现了代理的功能,这就是代理 的关键,我理解的。

3 代理类创建

public class ProxyHouse implements IHouse{      private final String TAG = ProxyHouse.class.getSimpleName();      private IHouse house;      public ProxyHouse(IHouse house){          this.house = house;      }      @Override      public void getHouseInfo() {         house.getHouseInfo();          }        @Override      public void signContract() {          house.signContract();      }        @Override      public void payFees() {          house.payFees();      }  }  

4   运用——体现出代理思想
  
IHouse house = new House("Downton Abbey", 5000);  IHouse proxyHouse = new ProxyHouse(house);  System.out.print( "looking for a perfect house");  proxyHouse.getHouseInfo();  System.out.print( "thinking");  proxyHouse.signContract();  proxyHouse.payFees();  System.out.print("so easy");

IHouse 的两个实现都是用子类实现父类,但是你仔细观察两个构造方法也是不一样的,这是非常重要的,所以关键点来了。RealSubject 是一个中规中矩的实体类,构造方法也是一样的,但是Proxy就不一样了,
public ProxyHouse(IHouse house){          this.house = house;      }  
它是直接用抽象的部分(接口类,为什么我说这个接口就是两者的连接点)来作为构造方法的参数,这样就联系起来了。达到了操作RealSubject 的目的。好好体会,其实不难,还有好多其他模式的代理,先就不说了,以后有体会了自己再来聊一聊



坚持一个好的习惯,慢慢的,你会发现它已经让你受益颇多。











   

0 0
原创粉丝点击