• 代理模式


    代理模式实现了职责分离,真实类可专注于具体业务,代理类用来提供访问控制等具体业务无关的功能。

    下面以明星和经纪人的关系来理解一下代理模式。我们假设明星的主要工作是表演,代言,接受访问。在这些活动中,经纪人则需要为明星接受工作,安排档期,收钱等等。

    代码上我以接受访问为例实现一下代理模式。

    首先定义一个明星工作的接口。

    1 public interface Subject {
    2     //预约
    3     boolean appointment();
    4     //讲话
    5     void speech();
    6 }    

    接下来,经纪人实现Subject接口

     1 public class Proxy implements Subject{
     2     private final Subject sub = new MrsF();
     3     
     4     @Override
     5     public void speech() {
     6         before();
     7         this.sub.speech();
     8         after();
     9     }
    10     
    11     
    12     private void before(){
    13         System.out.println("说话之前喝口水");
    14     }
    15     
    16     private void after(){
    17         System.out.println("说话之后赶紧溜");
    18     }
    19 
    20     @Override
    21     public boolean appointment() {
    22         System.out.println("记者访问,接受吗?");
    23         return this.sub.appointment();
    24     }
    25 }

    明星完成具体工作。

     1 public class MrsF implements Subject{
     2 
     3     @Override
     4     public void speech() {
     5         System.out.println("完全处理,已交律师捏造");
     6     }
     7 
     8     @Override
     9     public boolean appointment() {
    10         return new Random().nextBoolean();
    11     }
    12 
    13 }

    访问

    1 public static void main(String[] args) {
    2         Proxy proxy = new Proxy();
    3         if (proxy.appointment()) {
    4             System.out.println("接受了访问");
    5             proxy.speech();
    6         }else {
    7             System.out.println("拒绝了访问");
    8         }
    9     }

    可以看到,外界去访问的时候不直接访问明星,而是通过其经纪人代为传话。

    结果:

    记者访问,接受吗?
    接受了访问
    说话之前喝口水
    完全处理,已交律师捏造
    说话之后赶紧溜
    记者访问,接受吗?
    拒绝了访问

    可以看到,实现代理模式的关键是代理类与真实类的组合。由代理类实现对真实类的控制。这样就实现了对真实类的封装。

  • 相关阅读:
    用javascript写星际飞机大战游戏
    Vue源码分析之实现一个简易版的Vue
    Vue源码分析之数据驱动
    Vue源码分析之虚拟DOM
    使用HbuilderX离线打包5+APP
    ERROR in build.js from UglifyJs
    PHP 的一些开发规范
    Markdown使用TOC自动生成导航栏
    Hexo博客skapp主题部署填坑指南
    Docker 官方安装详解
  • 原文地址:https://www.cnblogs.com/xushy/p/9287957.html
Copyright © 2020-2023  润新知