代理模式基础

来源:互联网 发布:应用商店软件下载 编辑:程序博客网 时间:2024/06/11 00:05

代理模式是一种使用率非常高的模式,定义如下:

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

Subject类主题类的通用源码:

/* * 抽象主题类 */public interface Subject {    //定义一个方法    public void request();}
/* *  * 真实主题类 */public class RealSubject implements Subject {        //  实现方法    public void request() {        // TODO Auto-generated method stub        //业务逻辑处理    }}
/* *  * 代理类 */public class Proxy implements Subject {    //要代理那个实现类    private Subject subject =null;    //默认被代理者    public Proxy() {    // TODO Auto-generated constructor stub    this.subject=new Proxy();    }    //通过构造函数传递代理者    public Proxy(Subject subject){        this.subject=subject;    }    public void request() {        // TODO Auto-generated method stub        this .before();        this.subject.request();        this.after();    }    //预处理    private void before() {        // TODO Auto-generated method stub        System.out.println("do something before");    }    //善后处理    private void after() {        // TODO Auto-generated method stub        System.out.println("do something after");    }}
/* * 场景类 */public class Client {    public static void main(String[] args) {        //真实主题        RealSubject r=new RealSubject();        r.request();        //代理        Proxy p=new Proxy(r);        p.request();    }}

例:游戏找人代打

/* * 游戏者接口 *  */public interface IGamePlayer {    //登录游戏    public void login(String user,String password);    //杀怪    public void killBoss();    //升级    public void upgrade();}
/* *  * 游戏者 */public class GamePlayer implements IGamePlayer {    public String name="";    //构造函数    public GamePlayer(String mname) {        // TODO Auto-generated constructor stub        this.name=mname;    }    public void login(String user, String password) {        // TODO Auto-generated method stub        System.out.println("登录名为"+user+"用户名为"+name+"登陆成功");    }    public void killBoss() {        // TODO Auto-generated method stub        System.out.println(this.name+"在打怪");    }    public void upgrade() {        // TODO Auto-generated method stub        System.out.println(this.name+"有升了一级");    }}
/* *  * 代练者 */public class GamePalyerProxy implements IGamePlayer {    private IGamePlayer gamePlayer=null;    //通过构造函数传递要对谁进行代练    public GamePalyerProxy(IGamePlayer mgamePlayer) {        // TODO Auto-generated constructor stub        this.gamePlayer=mgamePlayer;    }    public void login(String user, String password) {        // TODO Auto-generated method stub        this.gamePlayer.login(user, password);    }    public void killBoss() {        // TODO Auto-generated method stub        this.gamePlayer.killBoss();    }    public void upgrade() {        // TODO Auto-generated method stub        this.gamePlayer.upgrade();    }}
/* *  * 场景类 */public class Client {    public static void main(String[] args) {        // TODO Auto-generated method stub        //定义一个痴迷的玩家        IGamePlayer player=new GamePlayer("张三");        //然后定义一个代练者        IGamePlayer proxy=new GamePalyerProxy(player);        //开始打游戏        proxy.login("zhangsan", "123456");        //打怪        proxy.killBoss();        //升级        proxy.upgrade();    }}

优点:
职责清晰;
高扩展性;
智能化;

1 0
原创粉丝点击