1.普通代理#
1.1定義##
普通代理要求客戶端只能訪問代理角色,不能訪問真實角色。
1.2實現(xiàn)##
1.2.1抽象角色類###
public interface IGamePlayer {
public void request();
}
1.2.2代理角色類###
public class GamePlayerProxy implements IGamePlayer{
private IGamePlayer gamePlayer = null;
public GamePlayerProxy(String _name) {
try {
gamePlayer = new GamePlayer(this, _name);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void request() {
this.before();
this.gamePlayer.request();
this.after();
}
private void before() {
//代理動作前處理
}
private void after() {
//代理動作后處理
}
}
1.2.3真實角色類###
public class GamePlayer implements IGamePlayer{
private String name = "";
public GamePlayer(IGamePlayer _gamePlayer, String _name) throws Exception{
if (_gamePlayer == null){
throw new Exception("無法生成真實角色!");
//此處添加一些創(chuàng)建的限制條件
}else{
this.name = _name;
}
}
@Override
public void request() {
System.out.println("處理具體的事物");
}
}
2.強制代理#
2.1定義##
強制代理要求必須通過真實角色查找到代理角色,否則不能訪問。代理角色由真實角色自己管理,不需要知道代理角色,代理角色還可以有自己的代理。
2.2實現(xiàn)##
2.2.1抽象代理類###
public interface IGamePlayer {
public void request();
public IGamePlayer getProxy();
}
2.2.2具體代理類###
public class GamePlayerProxy implements IGamePlayer{
private IGamePlayer gamePlayer = null;
private String name = "";
public GamePlayerProxy(IGamePlayer _gamePlayer, String _name) {
this.gamePlayer = _gamePlayer;
this.name = _name;
}
@Override
public void request() {
this.before();
this.gamePlayer.request();
this.after();
}
//代理類還可以有自己的代理,此處沒有所以返回自己
@Override
public IGamePlayer getProxy() {
return this;
}
private void before() {
//代理動作前處理
}
private void after() {
//代理動作后處理
}
}
2.2.3真實角色類###
public class GamePlayer implements IGamePlayer{
private String name = "";
private IGamePlayer proxy = null;
public GamePlayer(String _name) {
this.name = name;
}
@Override
public void request() {
if (this.proxy == null){
System.out.println("請獲取代理角色!");
}else {
System.out.println("處理具體的事物");
}
}
@Override
public IGamePlayer getProxy() {
this.proxy = new GamePlayerProxy(this, name);
return proxy;
}
}
3.動態(tài)代理模式#
未完待續(xù)。。。