博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释
阅读量:6234 次
发布时间:2019-06-22

本文共 3294 字,大约阅读时间需要 10 分钟。

代理模式(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: SeattleCurrent inventory: 115 gumballs.Current state: waiting for quater

你可能感兴趣的文章
详解Linux进程及作业管理
查看>>
智能家庭本周锋闻:小米进军移动医疗
查看>>
检测iOS的APP 性能的一些方法
查看>>
细数各种关键绩效指标KPI
查看>>
新一代信息技术产业加速变革 大数据产业迎发展机遇
查看>>
ANTVR是否是虚拟现实的好故事?
查看>>
运营商如何创新流量经营模式?
查看>>
模糊的边界:内存和存储以全新方式融合
查看>>
为何Windows版QuickTime突然寿终正寝?
查看>>
巧用MapReduce+HDFS,海量数据去重的五大策略
查看>>
天津:智慧园区形成智能制造生态圈
查看>>
高速无线网络:现实还是科幻?
查看>>
《C语言课程设计》一2.4 表达式和基本语句
查看>>
第一次参加就甩开IBM 阿里云成为国际顶级竞技手
查看>>
搭建B2P风控体系 破题分布式光伏融资难题
查看>>
大白话解释模型产生过拟合的原因!
查看>>
感知时代 智造中国 ——首届中国智谷大会际会风云
查看>>
移动物联网的Arduino开发板:Particle推出Electron
查看>>
校企联合,走大数据职业人才培养创新之路
查看>>
德勤报告:如何利用区块链调查客户忠诚度
查看>>