设计模式--5.1 代理模式--入门

1.代理模式

(1) 为其它对象提供一种代理,以控制对这个对象的访问.
(2) 代理模式也叫委托模式,其它模式,如状态模式、策略模式、访问者模式,本质上是在更特殊的场合使用了代理模式。

2.代理模式通用类图

  

(1)Subject 抽象主题角色,可以是抽象类,也可以是接口,是一个普通的业务类型定义 (IGamePlayer)
(2)RealSubject 也叫被委托角色、被代理角色,它才是冤大头,是业务逻辑的具体执行者。(GamePlayer,具体执行业务)
(3)Proxy 也叫委托类、代理类,它负责对真实角色的应用,把所有Suject定义的方法限制,委托给真实角色(GamePlayer)实现,并在真
实角色处理前和处理后,做预处理和善后功能

3.优点
(1)职责清晰
(2)高扩展性
(3)智能化

4.使用场景
(1) 权限校验
(2)打印日志
(3)事务管理

5.第一阶段

(1)例子类图

(2) 接口类 Subjects

  

package com.design.代理模式.第一阶段;

public interface IGamePlayer {
    void login(String username , String pwd);

    void killBoss();

    void upgrade();
}    

(3)真实角色 RealSubjects

package com.design.代理模式.第一阶段;

public class GamePlayer implements IGamePlayer {
    private String name;

    public GamePlayer() {
        super();
    }

    public GamePlayer(String _name) {
        super();
        this.name = _name;
    }

    // 登录
    @Override
    public void login(String username, String pwd) {
        System.out.println("GamePlayer:"+ name +" login.....");

    }

    // 杀怪
    @Override
    public void killBoss() {
        System.out.println("GamePlayer:"+ name +" killBoss.....");

    }

    // 升级
    @Override
    public void upgrade() {
        System.out.println("GamePlayer: "+ name +" upgrade.....");

    }

}

(4)代理类 Proxy

package com.design.代理模式.第一阶段;

public class GamePlayerProxy implements IGamePlayer {
    private IGamePlayer gamePlayer = null;

    public GamePlayerProxy() {
        super();
    }

    // 通过构造函数决定要对谁进行代练
    public GamePlayerProxy(IGamePlayer _gamePlayer) {
        super();
        this.gamePlayer = _gamePlayer;
    }

    // 代练登录
    @Override
    public void login(String username, String pwd) {
        this.gamePlayer.login(username, pwd);
    }

    // 代练杀怪
    @Override
    public void killBoss() {
        this.gamePlayer.killBoss();
    }

    // 代练升级
    @Override
    public void upgrade() {
        this.gamePlayer.upgrade();
    }

}

(5)场景类

package com.design.代理模式.第一阶段;

public class Client {

    public static void main(String[] args) {
        IGamePlayer gp = new GamePlayer("lvyafei");

        IGamePlayer proxy = new GamePlayerProxy(gp);
        proxy.login("lvyf", "123456");
        proxy.killBoss();
        proxy.upgrade();
    }
}
时间: 2024-10-25 11:44:42

设计模式--5.1 代理模式--入门的相关文章

设计模式之动态代理模式

设计模式之动态代理模式 代理模式: Provide a surrogate or placeholder for another object to controlaccess to it(为其他对象提供一种代理以控制对这个对象的访问).使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象.创建开销 大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能. 代理模式相关内容详见本人之前文章:http://www.cnblogs.com/zh

设计模式(2)_代理模式 ————— 控制对象访问

设计模式(2)_代理模式 ----- 控制对象访问 一.动机 需求 现在有这样一个需求:有一个出版社,该出版社有一个工厂,专门用来生产制造图书,该工厂里有很多台生产制造图书的机器.每个机器有自己的位置坐标,用 int表示,机器的状态,{正在工作,暂停,故障},已经印刷了多少页图书.在出版社 在工厂 厂长的电脑屏幕上,可以随时打印出任何一台机器的报告信息(report infomation). 下来 我们用代码实现这个需求: PrinterMachine.java package com.crg;

设计模式学习之代理模式(Proxy)

一.代理模式的初衷 不想让客户端直接访问具体实现接口,客户端不应该直接访问具体实现,一般会涉及到以下四个对象 业务接口:定义客户端访问的接口,是实现类和代理类都需要实现的 实现类:实现了业务接口,真正的实现是在这里 代理类:同样实现了业务接口,一般都会关联一个实现类的实例,由它来调用实现类 客户端:顾名思义,使用者,与代理类打交道,甚至都不知道具体实现类的存在. 二.代理模式设计图 三.代理模式的简单实现代码 BizInterface.java package com.lipan.designp

设计模式学习--------12.代理模式学习

场景: 福尔摩斯一直想送礼物给花生,但是羞于直接赠送,于是想到让房东太太去帮忙送礼物.编程如何实现呢? 定义: 为其他对象提供一种代理以控制对这个对象的访问. 角色: Proxy:代理对象.有下列功能: 实现与具体的目标对象一样的接口,这样就可以使用代理来代替具体的目标对象. 持有一个具体目标对象的引用,可以在需要时调用具体的目标对象. 可以控制对目标对象的访问,并可以负责创建和删除它. package com.kris.study; public class Proxy implements

【设计模式】Proxy 代理模式

[设计模式]Proxy 代理模式 1.代理模式的定义 代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问. 2.静态代理 首先我们通过案例来引出为什么我们需要使用代理模式. 我们给出如下一个接口Moveable 和该接口的实现类: Moveable.java package com.proxy; public interface Moveable { void move(); } Tank.java package com.proxy; import java.util.Rando

设计模式学习之--代理模式

代理模式,顾名思义,意思和我们日常生活中的代理差不多,举一个最简单的例子,我们知道,我们的火车站购票有很多的火车票代售点,这个火车票代售点可以代替我们的火车站的售票处让我们买票,当然,代售点相比于火车站售票点又可以提供电话订票和提前预定,这样,火车票代售点就基本可以实现火车站售票点的基本功能,同时还可以提供相对于火车站售票点其他的功能.那么,我们的设计模式中的代理模式就是这个意思. 在我们的程序中,许多类的方法中我们总需要一些额外的共同的功能,比如日志和性能优化操作,如果在所有 这些类中都加入这

设计模式学习之代理模式学习(一)

关于设计模式想必学习过Java语言的人都知道吧,当时对其进行深入学习的的人应该不是很多.在我看来设计方面的知识相比于框架应用配置等知识要有意思的多,并且设计模式的对一个程序员的编程思想提升有着很大的帮助.但是设计模式有二十三种,想要全部掌握还是要花点时间的,但如果是只学习常用的几种设计模式还是相对容易的.下面是我学习代理模式的一些心得. 问题引出      什么是代理模式,为什么要用代理模式. 现在有一个场景模拟:有一个tank类,他实现了Moveable接口,Moveable接口中有一个mov

php设计模式之Proxy(代理模式)和Facade(外观)设计模式

Proxy(代理模式)和Facade(外观)设计模式它们均为更复杂的功能提供抽象化的概念,但这两种实现抽象化的过程大不相同 Proxy案例中,所有的方法和成员变量都来自于目标对象,必要时,该代理能够对它所传递的数据进行修改或检查魔术方法使得Proxy的实现变的简单,Proxy模式的一类应用时用来记录方法的访问信息还可以利用Proxy的类确定代码的范围或调试程序中存在的问题 <?php class LoggingProxy{ private $target; //传递进去一个对象 public f

设计模式学习之代理模式

代理模式,可以分为两种,一种是静态代理,一种是动态代理. 两种代理从虚拟机加载类的角度来讲,本质上都是一样的,都是在原有类的行为基础上,加入一些多出的行为,甚至完全替换原有的行为.在我们平时写代码的过程中,代理模式可以说是随处可见,所以,本篇博客就将给大家介绍代理模式. 基本概念 代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口. UML图 Subject:抽