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

来源:互联网 发布:网络拓扑结构图软件 编辑:程序博客网 时间:2024/06/07 03:15

代理模式(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 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("\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 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











3 0
原创粉丝点击