设计模式之代理模式
2016-09-09 09:54
344 查看
设计模式--代理模式
设计模式应该很重要在软件设计中,不管在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 的目的。好好体会,其实不难,还有好多其他模式的代理,先就不说了,以后有体会了自己再来聊一聊
坚持一个好的习惯,慢慢的,你会发现它已经让你受益颇多。
相关文章推荐
- 设计模式----Proxy(代理)模式
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
- 设计模式 --- 代理模式(Proxy) 精选经验合集
- 深入浅出基于Java的代理设计模式
- 设计模式之Proxy(代理)
- 设计模式与泡mm的关系之Proxy代理模式及代理模式的再思考
- 设计模式(6)-代理模式(Proxy)
- Java设计模式:Proxy(代理)
- 设计模式之Proxy(代理)
- 深入浅出基于Java的代理设计模式
- 设计模式——代理模式
- 设计模式之代理模式(Proxy)
- C#中利用代理实现观察者设计模式
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式之Proxy(代理)
- 设计模式(8)-代理模式(Proxy)