设计模式之代理模式
来源:互联网 发布:淘宝宝贝上传图片问题 编辑:程序博客网 时间: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
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之-代理模式
- 设计模式之 代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之-----代理模式
- 设计模式之代理模式
- 设计模式之-代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 地理空间距离计算优化
- journald.conf 中文手册
- Http请求报文说明
- PCI设备的地址空间
- 对线程调度中Thread.sleep(0)的深入理解
- 设计模式之代理模式
- Java系列——abstract, interface比较分析
- Android开发中屏幕不同分辨率适配
- git push 时出现Connection closed by remote host
- OSX 升级PHP版本
- 用 Graphviz 可视化函数调用
- leetcode Reverse digits of an integer(经测试绝对正确)
- 加密解密 签名验签学习笔记
- IIS7下 【请求被中止: 未能创建 SSL/TLS 安全通道 】 解决方法