您的位置:首页 > 编程语言

设计模式 - 代理模式(proxy pattern) 未使用代理模式 详解

2014-07-12 14:14 561 查看

代理模式(proxy pattern) 未使用代理模式 详解

本文地址: http://blog.csdn.net/caroline_wendy

部分代码参考: http://blog.csdn.net/caroline_wendy/article/details/37698747

如果需要监控(monitor)类的某些状态, 则需要编写一个监控类, 并同过监控类进行监控.
但仅仅局限于本地, 如果需要远程监控, 则需要使用代理模式(proxy pattern).

具体方法:
1. 类中需要提供状态信息, 并提供一些get方法, 进行调用.
/**
* @time 2014年7月11日
*/
package proxy;

/**
* @author C.L.Wang
*
*/
public class GumballMachine {

String location; //位置信息

State soldOutState;
State noQuarterState;
State hasQuarterState;
State soldState;
State winnerState;

State state = soldOutState;
int count = 0;

/**
*
*/
public GumballMachine(String location, int numberGumballs) {
// TODO Auto-generated constructor stub
soldOutState = new SoldOutState(this);
noQuarterState = new NoQuarterState(this);
hasQuarterState = new HasQuarterState(this);
soldState = new SoldState(this);
winnerState = new WinnerState(this);

this.location = location;

this.count = numberGumballs;
if (numberGumballs > 0) {
state = noQuarterState;
}
}

public void insertQuarter() {
state.insertQuarter();
}

public void ejectQuarter() {
state.ejectQuater();
}

public void turnCrank() {
state.turnCrank();
state.dispense();
}

public void setState(State state) {
this.state = state;
}

public void releaseBall() {
System.out.println("A gumball comes rolling out the slot...");
if (count != 0)
count --;
}

public int getCount() {
return count;
}

public void refill(int count) {
this.count = count;
state = noQuarterState;
}

public State getState() {
return state;
}

public String getLocation() {
return location;
}

public State getSoldOutState() {
return soldOutState;
}

public State getNoQuarterState() {
return noQuarterState;
}

public State getHasQuarterState() {
return hasQuarterState;
}

public State getSoldState() {
return soldState;
}

public State getWinnerState() {
return winnerState;
}

public String toString() {
StringBuffer result = new StringBuffer();
result.append("\nMighty Gumball, Inc.");
result.append("\nJava-enabled Standing Gumball Model #2004\n");
result.append("Inventory: " + count + " gumball");
if (count != 1) {
result.append("s");
}
result.append("\nMachine is " + state + "\n");
return result.toString();
}
}

2. 监控类(monitor class), 调用get方法, 进行监控输出.
/**
* @time 2014年7月12日
*/
package proxy;

/**
* @author C.L.Wang
*
*/
public class GumballMonitor {

GumballMachine machine;

/**
*
*/
public GumballMonitor(GumballMachine machine) {
// TODO Auto-generated constructor stub
this.machine = machine;
}

public void report() {
System.out.println("Gumball Machine: " + machine.getLocation());
System.out.println("Current inventory: " + machine.getCount() + " gumballs.");
System.out.println("Current state: " + machine.getState());
}

}

3. 其余代码参考: http://blog.csdn.net/caroline_wendy/article/details/37698747

4. 测试类, 实例化具体类, 并使用监控类, 进行监控.
/**
* @time 2014年7月11日
*/
package proxy;

/**
* @author C.L.Wang
*
*/
public class GumballMachineTestDrive {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
GumballMachine gumballMachine = new GumballMachine("Seattle", 115);
GumballMonitor gumballMonitor = new GumballMonitor(gumballMachine);
gumballMonitor.report();
}

}

5. 输出:
Gumball Machine: Seattle
Current inventory: 115 gumballs.
Current state: waiting for quater


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息