Welcome

首页 / 软件开发 / 数据结构与算法 / 代理模式(proxy pattern) 未使用代理模式 详解

代理模式(proxy pattern) 未使用代理模式 详解2016-03-29 csdn博客 SpikeKing如果需要监控(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 stubsoldOutState = 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("
Mighty Gumball, Inc.");result.append("
Java-enabled Standing Gumball Model #2004
");result.append("Inventory: " + count + " gumball");if (count != 1) {result.append("s");}result.append("
Machine is " + state + "
");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 stubthis.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 stubGumballMachine gumballMachine = new GumballMachine("Seattle", 115);GumballMonitor gumballMonitor = new GumballMonitor(gumballMachine);gumballMonitor.report();}}
5. 输出:

Gumball Machine: SeattleCurrent inventory: 115 gumballs.Current state: waiting for quater