当前位置: 首页 > news >正文

设计模式 代理模式(Proxy)

为什么80%的码农都做不了架构师?>>>   hot3.png

其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法。先来看看关系图:

27095936_VgNi.jpg

 

根据上文的阐述,代理模式就比较容易的理解了,我们看下代码:

public interface Sourceable {  
    public void method();  
}  
public class Source implements Sourceable {  
  
    @Override  
    public void method() {  
        System.out.println("the original method!");  
    }  
}  
public class Proxy implements Sourceable {  
  
    private Source source;  
    public Proxy(){  
        super();  
        this.source = new Source();  
    }  
    @Override  
    public 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();  
    }  
  
}  

输出:

before proxy!

the original method!

after proxy!

代理模式的应用场景:

如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:

1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。

2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。

使用代理模式,可以将功能划分的更加清晰,有助于后期维护!

转载于:https://my.oschina.net/oosc/blog/1624606

相关文章:

  • Python GIL(Global Interpreter Lock)
  • blend4web的三维小场景的开发应用(2)
  • 前端面试题整理汇总
  • 如何优雅的在手机上进行Python编程
  • TiDB 源码阅读系列文章(一)序
  • 小程序开发 Wepy 框架 使用规范
  • 傲娇的性格、逗比的语气,和聊天机器人谈情说爱可行吗?
  • 自己简单写的 事件订阅机制
  • ReactNative从零到完整项目-state使用详解
  • 150行实现Promise 90%的功能
  • PlaNet图片识别机器,准确表现超过人类
  • 精选15个国外CSS框架
  • python基础—条件语句
  • 【391天】每日项目总结系列128(2018.03.03)
  • 有货移动Web端性能优化探索实践
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【comparator, comparable】小总结
  • Codepen 每日精选(2018-3-25)
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • JavaScript-Array类型
  • js正则,这点儿就够用了
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Median of Two Sorted Arrays
  • mongo索引构建
  • php面试题 汇集2
  • Python学习之路16-使用API
  • Python语法速览与机器学习开发环境搭建
  • QQ浏览器x5内核的兼容性问题
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 给Prometheus造假数据的方法
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 讲清楚之javascript作用域
  • 前端面试题总结
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 设计模式(12)迭代器模式(讲解+应用)
  • 手写一个CommonJS打包工具(一)
  • 微信公众号开发小记——5.python微信红包
  • 我的业余项目总结
  • 新版博客前端前瞻
  •  一套莫尔斯电报听写、翻译系统
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • scrapy中间件源码分析及常用中间件大全
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (09)Hive——CTE 公共表达式
  • (10)ATF MMU转换表
  • (AngularJS)Angular 控制器之间通信初探
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (LeetCode C++)盛最多水的容器
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (一)插入排序