zoukankan      html  css  js  c++  java
  • 设计模式(八)代理模式(结构型)

    概述            

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

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

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

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

    类图  

    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

  • 相关阅读:
    笔记64 Spring Boot快速入门(四)
    笔记63 Spring Boot快速入门(三)
    笔记62 Spring Boot快速入门(二)
    笔记61 Spring Boot快速入门(一)
    笔记60 Spring+Mybatis整合
    笔记59 Spring+Hibernate整合(二)
    【转】单点登录原理与实现
    【转】大型网站架构演变和知识体系
    Eclipse下绿色安装插件Aptana、Swing
    zeromq源码分析笔记之准备(0)
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3857245.html
Copyright © 2011-2022 走看看