zoukankan      html  css  js  c++  java
  • 代理模式

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

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

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

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

    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     }

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

    结果:

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

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

  • 相关阅读:
    Combine 框架,从0到1 —— 4.在 Combine 中使用计时器
    Combine 框架,从0到1 —— 4.在 Combine 中使用通知
    Combine 框架,从0到1 —— 3.使用 Subscriber 控制发布速度
    Combine 框架,从0到1 —— 2.通过 ConnectablePublisher 控制何时发布
    使用 Swift Package Manager 集成依赖库
    iOS 高效灵活地配置可复用视图组件的主题
    构建个人博客网站(基于Python Flask)
    Swift dynamic关键字
    Swift @objcMembers
    仅用递归函数操作逆序一个栈(Swift 4)
  • 原文地址:https://www.cnblogs.com/xushy/p/9287957.html
Copyright © 2011-2022 走看看