zoukankan      html  css  js  c++  java
  • 设计模式之第16章-代理模式(Java实现)

    设计模式之第16章-代理模式(Java实现)

      “现在朋友圈真是太让人蛋疼了啊。”“怎么说?”“一堆代理,各种卖东西的,看着好烦人。”“哎,删了呗。”“都是朋友,哪里好意思删啊。”“这倒也是、、、哎,迫于生计,没办法咯。还好我不玩。”“对了,你不就是代理的鼻祖么,身为代理模式,你作何感想。”“以代理之道还治代理之身啊。”

    代理模式之自我介绍

      最近出场率超级高,哦不,一直以来出场率都挺高的说的大名鼎鼎的模式,就是我-代理模式是也。有关我的定义如下:Provide a surrogate or placeholder for another object to control access to it.翻译过来就是说:为其他的对象提供一种代理以控制对这个对象的访问。通用类图如下:

      代理模式又被称作委托模式,它是一项基本设计技巧。许多其他的模式,如策略、访问者模式本质上是在更特殊场合采用了代理模式,在日常应用中,代理模式也可以提供非常好的访问控制。在Struts2中的Form元素映射中就采用了动态代理模式。

    代理模式之自我分析

      使用我的好处如下:

    • 职责清晰。真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务。
    • 高扩展性,具体的主题角色可以随时变化,只要其实现了接口,不用管它如何变化,都可以使用接口来使用方法。

    代理模式之实现

      具体的情景我们就以朋友圈卖吃的来说吧,恩,就卖辣条好了。首先是一个公司的接口类,实现每个公司的简单功能:

    1 public interface ICompany{
    2     //打上品牌
    3     public void brand(String brand);
    4     //出售
    5     public void sell();
    6 }

      然后是公司的具体实现类:

     1 public class Company implements ICompany{
     2     private String name = "";
     3     //构造函数获取名字
     4     public Company(String name){
     5         this.name = name;
     6     }
     7 
     8     //注册商标
     9     public void brand(String name){
    10         System.out.println("公司的名字是:"+name);
    11     }
    12 
    13     //出售产品
    14     public void sell(){
    15         System.out.println("最后三天清仓处理,买一箱送三箱。。。");
    16     }
    17 }
    View Code

      最后是最重要的代理实现了:

     1 public class Proxy implements ICompany{
     2     private ICompany cp = null;
     3     //通过构造函数传递代理的公司
     4     public Proxy(ICompany cp){
     5         this.cp = cp;
     6     }
     7     //代理在朋友圈打品牌
     8     public viod brand(String name){
     9         this.cp.brand(name);
    10     }
    11 
    12     //代理在卖东西
    13     public void sell(){
    14         this.cp.sell();
    15     }
    16 }
    View Code

      好了,基本上实现就是这样了,最后友情送上场景类一个:

     1 public class Client{
     2     public static void main(String[] args) {
     3         //卫龙辣条,我的最爱
     4         ICompany cp = new Company("卫龙");
     5         //定义一个代理,来卖辣条
     6         ICompany proxy = new Proxy(cp);
     7         //代理打品牌
     8         proxy.brand("卫龙");
     9         //代理出售
    10         proxy.sell();
    11     }
    12 }
    View Code

      至此,实现部分完毕。

    代理模式之应用场景

      场景真是数也数不清了,找人LOL、魔兽各种代练,找人代理卖房买房什么的老多了。下面说几种常见的代理情况:

    • 远程代理:为一个对象在不同地址空间提供局部的代理代表。
    • 虚代理:根据需要创建开销很大的对象。
    • 保护代理:控制对原始对象的访问。
    • 智能指引:取代了简单的指针,它在访问对象时执行一些附加操作。

      荆轲刺秦王,设计模式心中藏,好了,今天到此结束。

     

     

      PS:本博客欢迎转发,但请注明博客地址及作者~

      博客地址:http://www.cnblogs.com/voidy/

      博客新址:http://voidy.net

      <。)#)))≦

     

  • 相关阅读:
    iptables dnat不通
    os.system()和os.popen()
    mysql登录提示ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded解决方法
    SpringBoot之web开发
    基于MQ的分布式事务解决方案
    Docker核心技术
    [Java]Object有哪些公用方法?
    zookeeper
    单例模式的几种实现方式及优缺点
    并发编程之Synchronized原理
  • 原文地址:https://www.cnblogs.com/voidy/p/4253945.html
Copyright © 2011-2022 走看看