- 浏览: 202497 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
yixinhu:
你好 能加下你的QQ么 我怎么打出来的exe点击都没反应啊.. ...
java 生成exe 文件 -
chenxiang105:
如果不需要flash 只需要做图片的翻页效果 这个是否也合适类 ...
jQuery插件page peel AD实现动态卷页、翻页或卷角flash广告效果 -
tuoxie007:
幸苦,好文章!
jetspeed门户项目组介绍 -
bobo:
需要考虑不同浏览器的兼容性
通过网页访问本地资源程序 -
tag13346:
说得这么玄,看下
时空趋势理论 --- 超越时空的均线技术(转载 )
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
1。状态模式允许一个对象基于内部状态而拥有不同的行为。
2。和程序状态机(PSM)不同,状态模式用类代表状态。
3。Context会将行为委托给当前状态对象。
4。通过每个状态封装进一个类,我们把以后需要做的任何改变局部化。
5。状态模式和策略模式有相同的类图,但是他们的意图不同。
6。策略模式通常会用行为或算法来配置Context类。
7。状态模式允许Context随着状态的改变而改变行为。
8。状态转换可以由State类或者Context类控制。
9。使用状态模式通常会导致设计中类的数目大量增加。
10。状态类可以被多个Context实例共享。
package pattern;
import java.util.Random;
public class GumBallMachineTestDrive {
public static void main(String[] args) {
GumballMachine gumballMachine = new GumballMachine(5);
System.out.println(gumballMachine);
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
System.out.println(gumballMachine);
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
System.out.println(gumballMachine);
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.ejectQuarter();
System.out.println(gumballMachine);
gumballMachine.insertQuarter();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
gumballMachine.insertQuarter();
gumballMachine.turnCrank();
System.out.println(gumballMachine);
}
}
interface State {
public void insertQuarter();
public void ejectQuarter();
public void turnCrank();
public void dispense();
public void refill(int count);
}
class NoQuarterState implements State {
GumballMachine gumballMachine;
public NoQuarterState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
public void insertQuarter() {
System.out.println("You inserted a quarter");
gumballMachine.setState(this.gumballMachine.getHasQuarterState());
}
public void ejectQuarter() {
System.out.println("You haven't inserted a quarter");
}
public void turnCrank() {
System.out.println("You need to pay first");
}
public void dispense() {
System.out.println("You need to pay first");
}
public void refill(int count) {
System.out.println("need't to refill first");
}
}
class HasQuarterState implements State {
Random randomWinner = new Random(System.currentTimeMillis());
GumballMachine gumballMachine;
public HasQuarterState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
public void insertQuarter() {
System.out.println("You can't insert another quarter");
}
public void ejectQuarter() {
System.out.println("Quarter returned");
this.gumballMachine.setState(this.gumballMachine.getNoQuarterState());
}
public void turnCrank() {
System.out.println("You turned...");
int winner = randomWinner.nextInt(3);
if ((winner == 0) && this.gumballMachine.getCount() > 1) {
System.out.println("winner=" + winner + " count="
+ this.gumballMachine.getCount());
this.gumballMachine.setState(this.gumballMachine.getWinnerState());
} else {
this.gumballMachine.setState(this.gumballMachine.getSoldState());
}
}
public void dispense() {
System.out.println("No gumball dispensed");
}
public void refill(int count) {
System.out.println("need't to refill first");
}
}
class SoldOutState implements State {
GumballMachine gumballMachine;
public SoldOutState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
public void insertQuarter() {
refill(5);
}
public void ejectQuarter() {
System.out.println("There are no a quarter");
}
public void turnCrank() {
refill(5);
}
public void dispense() {
refill(5);
}
public void refill(int count) {
System.out.println("refill 5 count");
this.gumballMachine.setCount(count);
this.gumballMachine.setState(this.gumballMachine.getHasQuarterState());
}
}
class SoldState implements State {
GumballMachine gumballMachine;
public SoldState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
public void insertQuarter() {
System.out.println("Please wait ,we're already giving you a gumball");
}
public void ejectQuarter() {
System.out.println("Sorry ,you already turned the crank");
}
public void turnCrank() {
System.out.println("Turning twice doesn't get you another gumball!");
}
public void dispense() {
this.gumballMachine.releaseBall();
if (this.gumballMachine.getCount() > 0) {
this.gumballMachine.setState(this.gumballMachine
.getNoQuarterState());
} else {
System.out.println("Oops, out of gumballs");
this.gumballMachine.setState(this.gumballMachine.getSoldOutState());
}
}
public void refill(int count) {
System.out.println("need't to refill first");
}
}
class WinnerState implements State {
GumballMachine gumballMachine;
public WinnerState(GumballMachine gumballMachine) {
this.gumballMachine = gumballMachine;
}
public void insertQuarter() {
System.out.println("Please wait ,we're already giving you a gumball");
}
public void ejectQuarter() {
System.out.println("Sorry ,you already turned the crank");
}
public void turnCrank() {
System.out.println("Turning twice doesn't get you another gumball!");
}
public void dispense() {
System.out
.println("YOU'RE A WINNER! You get two gumballs for your quarter");
this.gumballMachine.releaseBall();
if (this.gumballMachine.getCount() == 0) {
this.gumballMachine.setState(this.gumballMachine.getSoldOutState());
} else {
this.gumballMachine.releaseBall();
if (this.gumballMachine.getCount() > 0) {
this.gumballMachine.setState(this.gumballMachine
.getNoQuarterState());
} else {
System.out.println("Oops, out of gumballs");
this.gumballMachine.setState(this.gumballMachine
.getSoldOutState());
}
}
}
public void refill(int count) {
System.out.println("need't to refill first");
}
}
class GumballMachine {
State soldOutState;
State noQuarterState;
State hasQuarterState;
State soldState;
State state;
State winnerState;
int count = 0;
public GumballMachine(int numberGumballs) {
soldOutState = new SoldOutState(this);
noQuarterState = new NoQuarterState(this);
hasQuarterState = new HasQuarterState(this);
soldState = new SoldState(this);
winnerState = new WinnerState(this);
this.count = numberGumballs;
if (numberGumballs > 0) {
state = noQuarterState;
}
}
public void insertQuarter() {
state.insertQuarter();
}
public void ejectQuarter() {
state.ejectQuarter();
}
public void turnCrank() {
state.turnCrank();
state.dispense();
}
void setState(State state) {
this.state = state;
}
public String toString() {
System.out.println(this.getState());
return this.getState().toString();
}
void releaseBall() {
System.out.println("A gumball come rolling out the slot ...");
if (count != 0) {
count = count - 1;
}
}
public State getSoldOutState() {
return soldOutState;
}
public void setSoldOutState(State soldOutState) {
this.soldOutState = soldOutState;
}
public State getNoQuarterState() {
return noQuarterState;
}
public void setNoQuarterState(State noQuarterState) {
this.noQuarterState = noQuarterState;
}
public State getHasQuarterState() {
return hasQuarterState;
}
public void setHasQuarterState(State hasQuarterState) {
this.hasQuarterState = hasQuarterState;
}
public State getSoldState() {
return soldState;
}
public void setSoldState(State soldState) {
this.soldState = soldState;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public State getState() {
return state;
}
public State getWinnerState() {
return winnerState;
}
public void setWinnerState(State winnerState) {
this.winnerState = winnerState;
}
}
发表评论
-
Iterator patten 读书笔记
2008-04-10 18:07 1064提供 一种方法 顺序访问 一个聚和 对象中的各个元素,而又不暴 ... -
模版模式 读书笔记
2008-04-10 18:04 1764在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版 ... -
Facade patten 读书笔记
2008-04-10 18:03 981提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一 ... -
Adapter patten 读书笔记
2008-04-10 18:01 971将一个类的接口,转换成客户期待的另一个接口。适配器让原本接口不 ... -
command patten 读书笔记
2008-04-10 17:56 9121 。命令模式将发出请求的对象和执行请求的对象解耦。 2。在被 ... -
单例模式 读书笔记
2008-04-07 18:44 912确保一个类只有一个实 ... -
抽象工厂模式读书笔记
2008-04-07 18:39 991提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具 ... -
工厂方法 读书笔记
2008-04-03 14:27 1140工厂发法定义了一个创建对象的接口或者抽象类,但是有子类来决定要 ... -
装饰者模式 读书笔记
2008-04-03 14:25 2144package pattern; public clas ... -
观察者模式(读书笔记)
2008-04-01 18:33 1133观察者模式定义了对象之间的一对多依赖,这样一来当一个对象改变状 ... -
Head First Design Patterns 读后感3-策略模式
2008-04-01 18:32 1336策略模式-定义了算法族,分别封装起来,让他们之间可以相互替换, ... -
Head First Design Patterns 读后感2 设计原则
2008-03-31 13:47 11631。软件开发中唯一一个不变的是 变化。大千世界,千奇百怪,行行 ... -
Head First Design Patterns 读后感1
2008-03-31 13:46 1421如何让大脑把记得更深刻 1。慢点,你理解的越多,记得月少 2。 ... -
proxy state 读书笔记
2008-03-28 18:35 1704定义:为另一个对象提供一个替身或者战位符以范围这个对象。 要点 ... -
阅读不懂,图书之过——《大话设计模式》创作历程 (转载)
2008-03-28 11:41 1137写这本书的确是个意外,因为在之前,我和所有的做技术的朋友一样, ... -
组合模式 读书笔记
2008-03-24 15:12 1323允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能 ...
相关推荐
良葛格的《Design Pattern学习笔记》不仅涵盖了经典的GOF设计模式,还额外介绍了几种多线程模式,这使得这份学习笔记成为了一个宝贵的学习资源。下面将对其中的部分设计模式进行详细介绍。 #### 二、GOF设计模式 ...
Android源码设计模式解析与实战读书笔记源代码 说明: 包名factorypattern.normal表示的是工厂方法模式的普通用法 包名factorypattern.practices表示的是工厂方法模式的常用 包名observerpattern表示的是观察者模式...
18. **状态模式(State)**:允许对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 19. **策略模式(Strategy)**:定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让...
9. 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为。 10. 观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到...
- 状态模式(State):允许对象在其内部状态改变时改变它的行为,看起来像改变了它的类。 - 策略模式(Strategy):定义一系列算法,并将每个算法封装起来,使它们可以相互替换,策略对象改变算法的选用。 - 模板...
6. **状态模式(State Pattern)**:Duck对象可能根据其当前状态(如飞、叫等)执行不同的行为,这可能是状态模式的应用。状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来好像修改了它的类。 通过...
备忘录模式(Memento Pattern)是一种行为设计模式,它的主要目的是在不破坏对象封装性的前提下,捕获一个对象的内部状态,并能在未来恢复这个状态。这种模式常用于需要记录历史状态或撤销/重做操作的场景。 在备忘...
设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的经验总结。...在DesignPattern-master这个压缩包中,你可以找到关于这些模式的详细讲解和实例代码,为你的Java开发之旅提供宝贵的参考资料。
ansible all -m cron -a "name=synctimefromntp user=root state=present minute='*/10' job=\"/sbin/ntpdate 182.16.0.1 &>/dev/null\"" ``` 删除定时任务: ```bash ansible all -m cron -a "name=...
通过上位机进行功率控制的实用程序 特征 在stumpwm的笔记本电脑关闭上挂起。... 盖状态的默认打开方式为“状态:\ s +打开” *lid-state-open-pattern* 默认盖状态打开模式为“状态:\ s +关闭” *l
3. 如果SD卡可以在指定电压下工作,那么它会回应CMD8的命令响应字,其中包含了**checkvoltage**和**check pattern**信息。若SD卡不支持该电压,则不会作出任何响应并继续保持在空闲状态。 4. 在物理层版本2.0(PLV...
### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...