标签:扩展性 出版社 new comm 购物 man 控制 hub 作用
Proxy Pattern,23种常用的面向对象软件的设计模式之一。(设计模式的说法源自《设计模式》一书,原名《Design Patterns: Elements of Reusable Object-Oriented Software》。1995年出版,出版社:Addison Wesly Longman.Inc。该书提出了23种基本设计模式,第一次将设计模式提升到理论高度,并将之规范化。)
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
(1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
(3).高扩展性
代理模式主要是多态的体现,代理对象与被代理对象都实现与同一个接口(保证双方能做一样的事情),再由代理对象干被代理对象的活
1)定义一个公用的上级接口CommonPerson,定义shopping()、bringFood()等方法
2)定义代理对象ProxyPersonA类与被代理对象ProxiedPersonB类,都实现CommonPerson接口,实现所有方法
3)定义调用方Caller类,访问代理对象,却调用的是被代理对象的方法,实现代理模式
代理模式分为静态代理、动态代理。
1)静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
2)动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象。
/**
* @Description: 统一上级接口(让代理对象与被代理对象拥有同样的方法才能做同样的事情)
* @Author: qiuxx
* @Date: 19:48 2018/6/18
*/
public interface CommonPerson {
/**
* 购物
*/
public void shopping();
/**
* 带饭
*/
public void bringFood();
}
/**
* @Description: 代理对象A
* @Author: qiuxx
* @Date: 19:50 2018/6/18
*/
public class ProxyPersonA implements CommonPerson {
private CommonPerson commonPerson;
private ProxyPersonA(){
}
public ProxyPersonA(CommonPerson commonPerson){
this.commonPerson = commonPerson;
}
@Override
public void shopping() {
this.commonPerson.shopping();
}
@Override
public void bringFood() {
this.commonPerson.bringFood();
}
}
/**
* @Description: 被代理对象B
* @Author: qiuxx
* @Date: 19:50 2018/6/18
*/
public class ProxiedPersonB implements CommonPerson {
@Override
public void shopping() {
System.out.println("我是被代理的对象B,现在出去购物去");
}
@Override
public void bringFood() {
System.out.println("我是被代理的对象B,现在帮别人带饭去");
}
}
/**
* @Description: 调用方(访问代理对象方法,做被代理对象的事情)
* @Author: qiuxx
* @Date: 19:55 2018/6/18
*/
public class Caller {
public static void main(String[] args){
ProxiedPersonB proxiedPersonB = new ProxiedPersonB();//被代理对象B
//创建代理对象A
ProxyPersonA proxyPersonA = new ProxyPersonA(proxiedPersonB);
//看似在访问代理对象A的方法,实际是调用了被代理对象B的方法
proxyPersonA.shopping();
proxyPersonA.bringFood();
}
}
博客地址:https://qiuxx404.github.io/2018/06/18/原创/设计模式/设计模式-代理模式
标签:扩展性 出版社 new comm 购物 man 控制 hub 作用
原文地址:https://www.cnblogs.com/qiuxx404/p/9195978.html