设计模式 - 代理模式(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
- 设计模式 - 代理模式(proxy pattern) 未使用代理模式 详解
- 设计模式 - Proxy Pattern(代理模式)
- 设计模式[8] Proxy Pattern 代理模式
- 设计模式 - Proxy Pattern(代理模式)
- 设计模式-代理模式(Proxy Pattern)
- 设计模式-代理模式(Proxy Pattern)
- 设计模式-代理模式(Proxy Pattern)
- 设计模式 -- 代理模式(Proxy Pattern)
- 设计模式学习--代理模式(Proxy Pattern)
- 设计模式-代理模式(proxy pattern)
- 设计模式--代理模式【Proxy Pattern】
- 设计模式之---代理模式(Proxy Pattern)
- 设计模式之代理模式(Proxy Pattern)
- java设计模式-代理模式(Proxy Pattern)
- 设计模式之代理模式---Proxy Pattern
- Java设计模式--代理模式【Proxy Pattern】
- 设计模式【代理模式Proxy Pattern】
- 【设计模式】代理模式(Proxy Pattern)
- 数字整除
- JAVA对象转换为JSON字符串
- MFC的CListBox控件使用LBS_OWNERDRAWVARIABLE风格不能AddString的问题
- 变量 地址 值
- MySQL数据库常用操作语句大全
- 设计模式 - 代理模式(proxy pattern) 未使用代理模式 详解
- Caused by: java.lang.ClassNotFoundException: org.jbpm.pvm.internal.processengine.SpringHelper
- Flyweight 设计模式
- C++ 四则运算
- ubuntu12.04 64bit 安装nodeJS
- sphinx 增量索引 实现近实时更新
- linux shell 脚本命令操作案例大全
- sublime text如何安装ctags来定位函数
- 详解YUV数据格式