码迷,mamicode.com
首页 > 编程语言 > 详细

DesignPattern_Java:Proxy Pattern

时间:2015-08-27 02:19:24      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:设计模式   代理模式   

代理模式 Proxy Pattern 委托模式

Provide a surrogate or placeholder for another object to control access to it.

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

抽象主题角色(Subject):该角色是真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题。

package com.DesignPattern.Structural.Proxy;

public interface Subject {
    // 定义一个请求方法
    public void request();
}

代理主题角色(Proxy Subject):也叫做委托类,代理类,该角色负责控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理完毕前后做预处理和善后处理工作。

package com.DesignPattern.Structural.Proxy;

public class ProxySubject implements Subject {
    private Subject subject;

    public ProxySubject(Subject subject) {
        this.subject = subject;
    }

    // 实现请求方法
    @Override
    public void request() {
        this.beforeRequest();
        subject.request();
        this.afterRequest();
    }
    //请求前的操作
    private void beforeRequest() {
        // 预处理
    }
    //请求后的操作
    private void afterRequest() {
        // 善后处理
    }
}

真实主题角色(Real Subject):该角色也叫做被委托角色、被代理角色,是业务逻辑的具体执行者。

package com.DesignPattern.Structural.Proxy;

public class RealSubject implements Subject {
    @Override
    public void request() {
        // 业务处理逻辑
        System.out.println("realSubject request");
    }
}

代理模式的实例

IGamePlayer.java

package com.DesignPattern.Structural.Proxy;

public interface IGamePlayer {
    public void killBoss();// 杀怪
    public void upGrade();// 升级
}

GamePlayer.java

package com.DesignPattern.Structural.Proxy;

public class GamePlayer implements IGamePlayer {

    private String name = "";

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

    @Override
    public void killBoss() {
        System.out.println(this.name + " killBoss");
    }

    @Override
    public void upGrade() {
        System.out.println(this.name + " upgrade level 1");
    }

}

GamePlayerProxy.java

package com.DesignPattern.Structural.Proxy;

import java.util.Date;

public class GamePlayerProxy implements IGamePlayer {

    private IGamePlayer player=null;
    public GamePlayerProxy(IGamePlayer player){
        this.player=player;
    }
    //记录打怪时间
    private void log(){
        System.out.println("打怪时间"+new Date().toString());
    }
    @Override
    public void killBoss() {
        this.log();
        player.killBoss();
    }

    @Override
    public void upGrade() {
        player.upGrade();
        this.count();
    }
    //计算升级所用的时间
    private void count(){
        System.out.println("upgrade cost time!");
    }

}

ClientDemo.java

package com.DesignPattern.Structural.Proxy;

public class ClientDemo {

    public static void main(String[] args){
        IGamePlayer player=new GamePlayer("Tom");
        IGamePlayer proxy=new GamePlayerProxy(player);
        proxy.killBoss();
        proxy.upGrade();
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载|Copyright ©2011-2015,Supernatural, All Rights Reserved.

DesignPattern_Java:Proxy Pattern

标签:设计模式   代理模式   

原文地址:http://blog.csdn.net/williamfan21c/article/details/48014565

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!