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

如果需要监控(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();
    }
}

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/project/

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索监控
, return
, count
, public
state
java 代理模式详解、ios代理模式详解、代理模式详解、proxy pattern、logback pattern 详解,以便于您获取更多的相关知识。

时间: 2024-07-30 12:45:15

代理模式(proxy pattern) 未使用代理模式 详解的相关文章

状态模式(state pattern) 未使用状态模式详解

状态模式可以控制状态的转换, 未使用设计模式时, 程序会非常繁杂. 具体方法: 1. 状态转换类. /** * @time 2014年7月11日 */ package state; /** * @author C.L.Wang * */ public class GumballMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; fin

乐在其中设计模式(C#) - 代理模式(Proxy Pattern)

原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为其他对象提供一个代理以控制对这个对象的访问. 示例 有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对象的访问. MessageModel using System;using System.Collections.Generic;using Sy

设计模式之代理模式(Proxy Pattern)

1 代理模式定义 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象. 本篇文章主要介绍的是静态代理,关于动态代理请参考:设计模式之动态代理(dynamic proxy) 2 代理模式的作用 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 通过代理类对原有类进行功能增强,如增加缓存.异常处理.日志处理等,Spring AOP用的就是(动态)代理模式 3 代理模式一

解读设计模式----代理模式(Proxy Pattern)

一.说买电脑的那些事 我之前一直用的是台式机,可总感觉不方便,特别是携带,就拿租房子后搬家来说吧,费了不少劲.种种原因有了想换笔记本的想法.5.1假期和一个好朋友特到电脑城去逛了一圈,一进电脑城便见:"HP笔记本XX总代理.IBM笔记本专卖.XX电脑YY总代理......". 看了很多家销售店,给我印象最深的就是到处都是XX牌电脑专卖和代理商,就在同一层楼里我就见着同一牌子有6家代理销售商铺.呵呵,看来我们买电脑就直接找销售代理商就可以,没必要在找生产厂商了,厂商生产出电脑后就是要把产

JSP使用MVC模式完成删除和修改功能实例详解_JSP编程

本文实例讲述了JSP使用MVC模式完成删除和修改功能的方法.分享给大家供大家参考.具体如下: 目标: ① 进一步理解MVC模式: ② 掌握删除功能的基本实现过程: ③ 掌握修改功能的基本实现过程. 主要内容: ① 使用MVC完成删除功能: ② 使用MVC模式完成信息更新功能. 1.如何使用MVC模式完成删除功能 根据MVC模式的特点,分别考虑MVC的3个部分. ① 首先考虑V部分: 输入:通常删除功能是在查询的基础上完成的,所以在用户信息列表界面上可以添加删除的超链. 输出:提示用户删除是否成功

Python语言:定制pattern的string模板(template) 详解

string.Template的pattern是一个正则表达式, 可以通过覆盖pattern属性, 定义新的正则表达式. 如: 使用新的定界符"{{", 把{{var}}作为变量语法. 代码: # -*- coding: utf-8 -*- ''''' Created on 2014.6.5 @author: Administrator @edition : python 3.3.0, eclipse pydev ''' import string t = string.Templat

详解Java正则表达式中Pattern类和Matcher类_java

前言 本文将介绍Java正则表达式中的Pattern类与Matcher类.首先我们要清楚指定为字符串的正则表达式必须首先被编译为pattern类的实例.因此如何更好的了解这两个类,是编程人员必须知道的. 以下我们就分别来看看这两个类: 一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1 ((A)(B(C))) 2 (A) 3 (B(C)) 4 (C) 组零始终代表整个表达式. 以 (?) 开头的组是纯的

java 正则表达式 pattern类 matcher类详解

一.正则表达式基础知识 我们先从简单的开始.假设你要搜索一个包含字符"cat"的字符串,搜索用的正则表达式就是"cat".如果搜索对大小写不敏感,单词"catalog"."Catherine"."sophisticated"都可以匹配.也就是说: 1.1 句点符号 假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以"t"字母开头,以"n"字母结束.另外

.net设计模式实例之代理模式(Proxy Pattern)

一.代理模式简介(Brief Introduction) 代理模式(Proxy Pattern)对其他对象提供一种代理以控制对这个对象的访问. 二.解决的问题(What To Solve) 1.远程代理 远程代理,也就是为了一个对象在不同的地址空间提供局部代表.这样可隐藏一个对象存 在与不同地质空间的事实,隐藏对象所在的地址空间. 比如.Net Web Service ,当一个项目在加入一个Web引用,引用Web Service的时候会在项 目中生成一个WebReference文件夹和响应的文件