• 设计模式(八)代理模式(结构型)


    概述            

    为其他对象提供一种代理以控制对这个对象的访问。

    抽象角色:声明真实对象和代理对象的共同接口;

    代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

    真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。

    类图  

    1

    代码 

    IGamePlayer接口对游戏玩家进行抽象:

    1 public interface IGamePlayer {
    2     public void killBoss();
    3     public void UpGrade();
    4 }

    GamePlayer实现IGamePlayer接口中的方法:

     1 public class GamePlayer implements IGamePlayer {
     2     private String name = null;
     3     public GamePlayer(String name) {
     4         super();
     5         this.name = name;
     6     }
     7     @Override
     8     public void killBoss() {
     9         System.out.println(this.name+"正在killBoss");
    10     }
    11     @Override
    12     public void UpGrade() {
    13         System.out.println(this.name+"突然UpGrade");
    14     }
    15 }

    GamePlayerProxy是代理类:

     1 public class GamePlayerProxy implements IGamePlayer {
     2     private IGamePlayer player = null;
     3     public GamePlayerProxy(IGamePlayer player) {
     4         super();
     5         this.player = player;
     6     }
     7     // 记录日志
     8     private void log() {
     9         System.out.println(new Date().toString() + "的时候在打怪");
    10     }
    11     @Override
    12     public void killBoss() {
    13         this.log();
    14         player.killBoss();
    15     }
    16     @Override
    17     public void UpGrade() {
    18         player.UpGrade();
    19         this.count();
    20     }
    21     private void count() {
    22         System.out.println("升了1级");
    23     }
    24 }

    测试:

    1 public class Main {
    2     public static void main(String[] args) {
    3         IGamePlayer player = new GamePlayer("张三");
    4         IGamePlayer proxy = new GamePlayerProxy(player);
    5         proxy.killBoss();
    6         proxy.UpGrade();
    7     }
    8 }

    优点                                                                                            

    • 职责清晰

    真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

    • 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
    • 高扩展性

    我是天王盖地虎的分割线                                                                 

    源代码:http://pan.baidu.com/s/1dD1Qx01

    java代理.zip

  • 相关阅读:
    SpringBoot集成Swagger2中不同环境开关配置
    mysql
    pip 命令汇总
    mysql 时间查询(当天、本周,本月,上一个月的数据)
    MYSQL 常用函数
    java8 array、list操作 汇【6】)- Java8 Lambda表达式增强版Comparator和排序
    解决pip安装超时的问题
    Java对象为空时,将null转换为"" 保存值为空的属性
    mysql -- 模糊查询的四种方法
    Mysql 查询以某个字符开头的语句
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3857245.html
Copyright © 2020-2023  润新知