设计模式学习笔记(9)——代理模式
为什么80%的码农都做不了架构师?>>>
定义:代理模式就是给一个对象提供一个代理,并由代理对象控制对原对象的引用。
作用:为其他对象提供一种代理以控制对这个对象的访问。
类图:
在代理模式中有如下三个角色:
Subject: 抽象角色。声明真实对象和代理对象的共同接口。
Proxy: 代理角色。代理对象与真实对象实现相同的接口,所以它能够在任何时刻都能够代理真实对象。代理角色内部包含有对真实对象的引用,所以她可以操作真实对象,同时也可以附加其他的操作,相当于对真实对象进行封装。
RealSubject: 真实角色。它代表着真实对象,是我们最终要引用的对象
代码:
public interface Sourceable {public void method();
}
public class Source implements Sourceable {@Overridepublic void method() {System.out.println("the original method!");}
}
public class Proxy implements Sourceable {private Source source;public Proxy(){//默认的话,是某个具体对象的代理this.source = new Source();}public Proxy(Sourceable sourceable){this.source = sourceable;}@Overridepublic void method() {before();source.method();atfer();}private void atfer() {System.out.println("after proxy!");}private void before() {System.out.println("before proxy!");}
}
public class ProxyTest {public static void main(String[] args) {Sourceable source = new Proxy();source.method();}}
代理模式的应用场景:
如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:
1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。
2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。
使用代理模式,可以将功能划分的更加清晰,有助于后期维护!
转载于:https://my.oschina.net/jewill/blog/417144
设计模式学习笔记(9)——代理模式相关推荐
- 设计模式学习笔记之-代理模式
2019独角兽企业重金招聘Python工程师标准>>> 代理模式中,客户不会直接调用目标对象而是通过一个代码对象,客户调用代理对象代理对象去调用目标对象,起到对象与对象间 ...
- 设计模式学习笔记之代理模式
代理模式 为另一个对象提供一个替身或占位符以控制对这个对象的访问. 使用代理模式创建代表对象,让代表对象控制某个对象的访问,被代理的对象可以是远程的对象.创建开销大的对象或需要安全控制的对象. 在代理 ...
- 设计模式学习笔记——解释器(Interpreter)模式
设计模式学习笔记--解释器(Interpreter)模式 @(设计模式)[设计模式, 解释器模式, Interpreter] 设计模式学习笔记解释器Interpreter模式 基本介绍 解释器案例 类 ...
- 设计模式学习笔记——命令(Command)模式
设计模式学习笔记--命令(Command)模式 @(设计模式)[设计模式, 命令模式, command] 设计模式学习笔记命令Command模式 基本介绍 命令案例 类图 实现代码 Command接口 ...
- 设计模式学习笔记——状态(State)模式框架
设计模式学习笔记--状态(State)模式框架 @(设计模式)[设计模式, 状态模式, State] 设计模式学习笔记状态State模式框架 基本介绍 状态案例 类图 实现代码 State接口 Day ...
- 设计模式学习笔记——备忘录(Memento)模式
设计模式学习笔记--备忘录(Memento)模式 @(设计模式)[设计模式, 备忘录模式, memento] 设计模式学习笔记备忘录Memento模式 基本介绍 备忘录案例 类图 实现代码 Memen ...
- 设计模式学习笔记——观察者(Observer)模式
设计模式学习笔记--观察者(Observer)模式 @(设计模式)[设计模式, 观察者模式, Observer] 设计模式学习笔记观察者Observer模式 基本介绍 观察者案例 类图 实现代码 Ob ...
- 设计模式学习笔记——外观(Facade)模式
设计模式学习笔记--外观(Facade)模式 @(设计模式)[设计模式, 外观模式, facade] 设计模式学习笔记外观Facade模式 基本介绍 外观案例 类图 实现代码 Database类 ma ...
- 设计模式学习笔记——访问者(Visitor)模式
设计模式学习笔记--访问者(Visitor)模式 @(设计模式)[设计模式, 访问者模式, visitor] 设计模式学习笔记访问者Visitor模式 基本介绍 访问者案例 类图 实现代码 Visit ...
- 设计模式学习笔记——装饰(Decorator)模式
设计模式学习笔记--装饰(Decorator)模式 @(设计模式)[设计模式, 装饰模式, decorator] 设计模式学习笔记装饰Decorator模式 基本介绍 装饰案例 类图 实现代码 Dis ...
最新文章
- R安装包源设置的常见方式及国内常用源
- 「强化学习可解释性」最新2022综述
- 周期串java_求最小周期串
- 大型网站演化发展历程之二
- 子图同构算法——Ullmann算法(1)不包含refine procedure的简单穷举算法。
- byte转换为string乱码_每日一课 | 如何将int转换为String
- 手把手带你入门Python爬虫(四、ORM与peewee)
- 【C 语言】一元二次方程
- CCF CSP 201809-1 卖菜
- 导数与微分的知识点思维导图_高中生物思维导图知识点总结
- spring相互依赖怎么解决_被问到Spring循环依赖怎么解决?秀给面试官看!内附图解...
- CentOS安装vim
- C语言Windows程序设计-第三天-属于自己的窗口
- 海康威视智能终端获取实时人脸体温识别记录二次开发java
- 圆锥曲线之用齐次法求解直线过定点问题
- java 字符串排列组合_字符串排列组合问题
- ODL(C版本)安装过程
- 2020北京邮电大学计算机学院复试经验分享
- php控制树莓派GPIO
- 倍福--232/485通信
热门文章
- wpf 修改label值_WPF 获取动态添加控件的值
- python和javascript详细对比_python与javascript 引入模块的方法对比
- 汇编语言典型例子详解_从架构到 RTOS 详解 DSP 和 MCU 的区别和联系
- 常见JavaScript基础面试题上(附答案)
- MATLAB Simulink 做BP PID报错:Error :*** during flag=* call must be a real vector of length 3
- CSS学习03之基本选择器
- 人工神经网络理论、设计及应用_TensorFlow深度学习应用实践:教你如何掌握深度学习模型及应用...
- 数据结构 - 递归
- HashSet源码解析
- 对一致性Hash算法,Java代码实现的深入研究