• Java学习笔记——设计模式之四.代理模式


    To be, or not to be: that is the question.

                     ——《哈姆雷特》

     

    代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

    上代码:

    1 package cn.no4.proxy;
    2 
    3 public interface IMakeMoney {
    4 
    5     void makeMoney();
    6 }
     1 package cn.no4.proxy;
     2 
     3 public class Proxy implements IMakeMoney {
     4 
     5     private Boss boss;
     6     
     7     public Proxy() {
     8         boss = new Boss();
     9     }
    10 
    11     @Override
    12     public void makeMoney() {
    13         System.out.println("表面上是proxy在做事情...");
    14         boss.makeMoney();
    15     }
    16 
    17 }
     1 package cn.no4.proxy;
     2 
     3 public class Boss implements IMakeMoney{
     4 
     5     private double money;
     6     
     7     
     8     public double getMoney() {
     9         return money;
    10     }
    11 
    12 
    13     public void setMoney(double money) {
    14         this.money = money;
    15     }
    16 
    17 
    18     @Override
    19     public void makeMoney() {
    20         
    21         money += 5000000;
    22         System.out.println("实际上是幕后黑手大boss干的,大boss得到了$"+money);
    23     }
    24 
    25 }

    测试类:

    1 package cn.no4.proxy;
    2 
    3 public class _Test {
    4 
    5     public static void main(String[] args) {
    6         Proxy proxy = new Proxy();
    7         proxy.makeMoney();
    8     }
    9 }

     下面修改了Proxy类的makeMoney方法,实现了对boss对象访问的控制:

     1 package cn.no4.proxy.instance;
     2 
     3 public class Proxy implements IMakeMoney {
     4 
     5     private Boss boss;
     6     
     7     public Proxy() {
     8         boss = new Boss();
     9     }
    10 
    11     @Override
    12     public void makeMoney(double money) {
    13         System.out.println("表面上是proxy在做事情...");
    14         //以下代码实现了对boss访问的控制
    15         if (money < 5000000.0) {
    16             System.out.println("钱太少,打发要饭的呢!");
    17         }else{
    18             boss.makeMoney(money);
    19         }
    20     }
    21 
    22 }

    测试类:

     1 package cn.no4.proxy.instance;
     2 
     3 public class _Test {
     4 
     5     public static void main(String[] args) {
     6         Proxy proxy = new Proxy();
     7         proxy.makeMoney(1);
     8         proxy.makeMoney(5000000);
     9     }
    10 }
    proxy.makeMoney(1);无法访问到boss对象,因为1块钱对于boss来讲太少了
    proxy.makeMoney(5000000);这下可以访问到boss对象了,执行了boss的makeMoney方法
     
  • 相关阅读:
    Fluentd部署:如何监控Fluentd
    【615】国内国外经纬度坐标转换
    【614】矢量数据转栅格数据(cv2.fillPoly/cv2.polylines)
    【613】U-Net 相关
    【612】深度学习模型相关问题
    【611】keras 后端 backend 相关函数(Dice实现)
    面试官:new 关键字在 JVM 中是如何执行的?
    IntelliJ IDEA 2021.2 发布,这次要干掉 FindBugs 了!!
    Nginx 实现 10w+ 并发之 Linux 内核优化
    我们真的需要全栈开发吗?
  • 原文地址:https://www.cnblogs.com/tomasman/p/6851541.html
Copyright © 2020-2023  润新知