首页 > 代码库 > 设计模式 - 代理模式(proxy pattern) 未使用代理模式 详解
设计模式 - 代理模式(proxy pattern) 未使用代理模式 详解
代理模式(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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。