- 浏览: 348951 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
bsc2xp:
作者的文章不错,但是程序好像有错误:1、StreamFilte ...
Java6.0新特性之StAX--全面解析Java XML分析技术 -
bystander_:
写的真好啊, 牛
JAVA面试题解惑系列合集恢复下载 -
qdp150273:
想下载,怎么下载不了
《JAVA面试题解惑系列合集》PDF电子书下载 -
qdp150273:
不错啊,受益匪浅
《JAVA面试题解惑系列合集》PDF电子书下载 -
miroki:
感谢分享!
JAVA面试题解惑系列合集恢复下载
1.状态(State)模式部分
*设计谜题
---------------------------------------------
状态转换图不变,在售出糖果时,如果剩余糖果数大于1,有10%的几率掉下2个。
---------------------------------------------
Sharpen your pencil
---------------------------------------------
A、B、C、D、E、F
---------------------------------------------
Sharpen your pencil
Brain Power
---------------------------------------------
将调用dispense()方法的代码放到State子类中去实现。
---------------------------------------------
Sharpen your pencil
*运用状态模式给糖果机设计带来的益处是:
让每一个状态“对修改关闭”,让糖果机“对扩展开放”,这样可以方便地加入新的状态类。
状态(State)模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
Sharpen your pencil
连连看
2.状态(State)模式小结
*状态允许一个对象基于内部状态而拥有不同的行为。
*和程序状态机(PSM)不同,状态模式用类代表状态。
*Context会将行为委托给当前状态对象。
*通过把每个状态封装进一个类,我们把以后要做的任何改变局部化了。
*状态(State)模式和策略(Strategy)模式类图相同,但是它们有不同的意图。
*策略(Strategy)模式通常会用行为或算法来配置Context类。
*状态(State)模式允许Context随着状态的改变而改变行为。
*状态转换可以由State类或Context类来控制。
*使用状态模式通常会导致设计中类的数目大量增加。
*状态可以被多个Context实例共享。
3.状态(State)模式实例
测试程序:
---------------------------------------------
---------------------------------------------
测试结果:
---------------------------------------------
*设计谜题
---------------------------------------------
状态转换图不变,在售出糖果时,如果剩余糖果数大于1,有10%的几率掉下2个。
---------------------------------------------
Sharpen your pencil
---------------------------------------------
A、B、C、D、E、F
---------------------------------------------
Sharpen your pencil
引用
---------------------------------------------
NoQuarterState:
turnCrank--告诉顾客投入硬币
dispense--什么都不做
HasQuarterState:
insertQuarter--告诉顾客已经有硬币
ejectQuarter--退回硬币,进入NoQuarterState
dispense--掉下1颗糖果,检查剩余糖果数量,大于0,进入NoQuarterState,等于0,进入SoldOutState(更好的方式:转入SoldState处理)
SoldState:
ejectQuarter--告诉顾客正在售出糖果
turnCrank--告诉顾客您没有投入硬币
SoldOutState:
insertQuarter--告诉顾客已售罄
ejectQuarter--告诉顾客您没有投入硬币
dispense--什么都不做
WinnerState:
insertQuarter--告诉顾客正在售出糖果
ejectQuarter--告诉顾客您没有投入硬币
turnCrank--告诉顾客您没有投入硬币
dispense--掉下2颗糖果,检查剩余糖果数量,大于0,进入NoQuarterState,等于0,进入SoldOutState
---------------------------------------------
NoQuarterState:
turnCrank--告诉顾客投入硬币
dispense--什么都不做
HasQuarterState:
insertQuarter--告诉顾客已经有硬币
ejectQuarter--退回硬币,进入NoQuarterState
dispense--掉下1颗糖果,检查剩余糖果数量,大于0,进入NoQuarterState,等于0,进入SoldOutState(更好的方式:转入SoldState处理)
SoldState:
ejectQuarter--告诉顾客正在售出糖果
turnCrank--告诉顾客您没有投入硬币
SoldOutState:
insertQuarter--告诉顾客已售罄
ejectQuarter--告诉顾客您没有投入硬币
dispense--什么都不做
WinnerState:
insertQuarter--告诉顾客正在售出糖果
ejectQuarter--告诉顾客您没有投入硬币
turnCrank--告诉顾客您没有投入硬币
dispense--掉下2颗糖果,检查剩余糖果数量,大于0,进入NoQuarterState,等于0,进入SoldOutState
---------------------------------------------
Brain Power
---------------------------------------------
将调用dispense()方法的代码放到State子类中去实现。
---------------------------------------------
Sharpen your pencil
--------------------------------------------- public class SoldOutState implements State { GumballMachine gumballMachine; public SoldOutState(GumballMachine gumballMachine) { this.gumballMachine = gumballMachine; } public void insertQuarter(){ System.out.println("Sorry,the gumballs are sold out."); } public void ejectQuarter(){ System.out.println("Sorry,you haven't insert a quarter."); } public void turnCrank(){ System.out.println("Sorry,you haven't insert a quarter"); } public void dispense(){ //do nothing } } ---------------------------------------------
*运用状态模式给糖果机设计带来的益处是:
让每一个状态“对修改关闭”,让糖果机“对扩展开放”,这样可以方便地加入新的状态类。
状态(State)模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
Sharpen your pencil
--------------------------------------------- public void refill(int count){ this.count = count; if(count>0){ this.state = noQuarterState; } } ---------------------------------------------
连连看
引用
---------------------------------------------
状态--封装基于状态的行为,并将行为委托到当前状态
策略--将可以互换的行为封装起来,然后使用委托的方法,决定使用哪一个行为
模板方法--由子类决定如何实现算法中的某些步骤
---------------------------------------------
状态--封装基于状态的行为,并将行为委托到当前状态
策略--将可以互换的行为封装起来,然后使用委托的方法,决定使用哪一个行为
模板方法--由子类决定如何实现算法中的某些步骤
---------------------------------------------
2.状态(State)模式小结
*状态允许一个对象基于内部状态而拥有不同的行为。
*和程序状态机(PSM)不同,状态模式用类代表状态。
*Context会将行为委托给当前状态对象。
*通过把每个状态封装进一个类,我们把以后要做的任何改变局部化了。
*状态(State)模式和策略(Strategy)模式类图相同,但是它们有不同的意图。
*策略(Strategy)模式通常会用行为或算法来配置Context类。
*状态(State)模式允许Context随着状态的改变而改变行为。
*状态转换可以由State类或Context类来控制。
*使用状态模式通常会导致设计中类的数目大量增加。
*状态可以被多个Context实例共享。
3.状态(State)模式实例
/** * 钢笔 * * @author zangweiren * */ public class FountainPen implements FountainPenState { FountainPenState fullState; FountainPenState halfFullState; FountainPenState emptyState; FountainPenState state; int inkLevel = 0; public FountainPen() { fullState = new FullState(this); halfFullState = new HalfFullState(this); emptyState = new EmptyState(this); state = emptyState; } @Override public void empty() { state.empty(); } @Override public void fill() { state.fill(); } @Override public void write() { state.write(); } void setState(FountainPenState state) { this.state = state; } FountainPenState getFullState() { return fullState; } FountainPenState getHalfFullState() { return halfFullState; } FountainPenState getEmptyState() { return emptyState; } } /** * 钢笔状态接口 * * @author zangweiren * */ public interface FountainPenState { void fill(); void write(); void empty(); } /** * 满 * * @author zangweiren * */ public class FullState implements FountainPenState { FountainPen pen; public FullState(FountainPen pen) { this.pen = pen; } @Override public void empty() { pen.inkLevel = 0; pen.setState(pen.getEmptyState()); System.out.println("The fountain pen is empty now."); } @Override public void fill() { System.out.println("Sorry,the fountain pen is already full."); } @Override public void write() { pen.inkLevel = pen.inkLevel - 1; if (pen.inkLevel == 0) { pen.setState(pen.getEmptyState()); System.out.println("The fountain pen is empty."); } else { pen.setState(pen.getHalfFullState()); System.out.println("The fountain pen is half full."); } } } /** * 半满 * * @author zangweiren * */ public class HalfFullState implements FountainPenState { FountainPen pen; public HalfFullState(FountainPen pen) { this.pen = pen; } @Override public void empty() { pen.inkLevel = 0; pen.setState(pen.getEmptyState()); System.out.println("The fountain pen is empty now."); } @Override public void fill() { pen.inkLevel = 100; pen.setState(pen.getFullState()); System.out.println("Congratulations,the fountain pen is full now."); } @Override public void write() { pen.inkLevel = pen.inkLevel - 1; if (pen.inkLevel == 0) { pen.setState(pen.getEmptyState()); System.out.println("The fountain pen is empty."); } else { System.out.println("The fountain pen is half full."); } } } /** * 空 * * @author zangweiren * */ public class EmptyState implements FountainPenState { FountainPen pen; public EmptyState(FountainPen pen) { this.pen = pen; } @Override public void empty() { System.out.println("Sorry,the fountain pen is already empty."); } @Override public void fill() { pen.inkLevel = 100; pen.setState(pen.getFullState()); System.out.println("Congratulations,the fountain pen is full now."); } @Override public void write() { System.out.println("Sorry,the fountain pen is empty."); } }
测试程序:
---------------------------------------------
public class TestFountainPen { public static void main(String[] args) { FountainPen pen = new FountainPen(); pen.fill(); int count = 5; while (count > 0) { pen.write(); count--; } pen.empty(); pen.write(); pen.fill(); pen.write(); pen.empty(); } }
---------------------------------------------
测试结果:
---------------------------------------------
引用
Congratulations,the fountain pen is full now.
The fountain pen is half full.
The fountain pen is half full.
The fountain pen is half full.
The fountain pen is half full.
The fountain pen is half full.
The fountain pen is empty now.
Sorry,the fountain pen is empty.
Congratulations,the fountain pen is full now.
The fountain pen is half full.
The fountain pen is empty now.
The fountain pen is half full.
The fountain pen is half full.
The fountain pen is half full.
The fountain pen is half full.
The fountain pen is half full.
The fountain pen is empty now.
Sorry,the fountain pen is empty.
Congratulations,the fountain pen is full now.
The fountain pen is half full.
The fountain pen is empty now.
发表评论
-
Java6.0新特性之StAX--全面解析Java XML分析技术
2010-04-19 12:57 23816作者:臧圩人(zangweiren) 网址:http://za ... -
《Head First设计模式》阅读笔记.全书总结
2010-04-14 15:13 55181、模式(Pattern)定义 ... -
《Head First设计模式》阅读笔记.其他设计模式
2010-04-14 13:33 22001、附录A部分-剩下的模 ... -
《Head First设计模式》阅读笔记.第十三章
2010-04-13 14:40 19581、与设计模式相处 模式:是在某种情境下(Context), ... -
《Head First设计模式》阅读笔记.第十二章
2010-04-12 15:15 20361、复合(Complex)模式部分 *模式通常被一起使用,并 ... -
《Head First设计模式》阅读笔记.第十一章
2010-04-08 17:57 23761、代理(Proxy)模式部分 实现RMI(远程方法调用)的 ... -
《Head First设计模式》阅读笔记.第八章
2010-03-30 14:28 23541.模板方法(Template Metho ... -
《Head First设计模式》阅读笔记.第九章
2010-01-27 10:33 25481.迭代器(Iterator)模式 ... -
《Head First设计模式》阅读笔记.第七章-外观模式实例补充
2010-01-21 17:08 2058// 电源 public class Power { p ... -
《Head First设计模式》阅读笔记.第七章
2010-01-21 11:02 22341.适配器(Adapter)模式部分 *OO适配器和真实世界 ... -
《Head First设计模式》阅读笔记.第六章
2010-01-19 14:53 19321.命令(Command)模式部分 引用----连连看解答- ... -
《Head First设计模式》阅读笔记.第五章
2010-01-15 16:48 20421.单件(单态,Singleton)模式部分 *有些对象我们 ... -
《Head First设计模式》阅读笔记.第四章
2010-01-14 17:06 24951.简单工厂(Simple Factory ... -
《Head First设计模式》阅读笔记.第三章
2010-01-13 12:07 21191.装饰者(Decorator)模式部分 *利用组合(com ... -
《Head First设计模式》阅读笔记.第二章
2010-01-12 15:04 24491.观察者(Observer)模式部分 *观察者模式:定义了 ... -
《Head First设计模式》阅读笔记.第一章
2010-01-12 10:00 38011.策略模式部分 *面向对象(OO)的四个基本概念是:抽象、 ...
相关推荐
1.1 《Head First设计模式》阅读笔记.第一章 1.2 《Head First设计模式》阅读笔记.第二章 1.3 《Head First设计模式》阅读笔记.第三章 1.4 《Head First设计模式》阅读笔记.第四章 1.5 《Head First设计模式》...
Head.First 设计模式学习笔记.pdf Head.First 设计模式学习笔记.pdf
笔记_HeadFirst设计模式
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
Head First 设计模式学习笔记。更多内容请参见文章内容。
HeadFirst 设计模式学习笔记3--装饰模式 Demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5582561.aspx
HeadFirst 设计模式学习笔记2--观察者模式 demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5581769.aspx
HeadFirst设计模式 读书 笔记
http://blog.csdn.net/laszloyu/archive/2010/05/11/5579765.aspx 示例代码
Head First设计模式读书笔记-DesignPatterns
NULL 博文链接:https://zhangfy068.iteye.com/blog/1706132
著名的《Head First Design ...由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理摘录,部分内容来自书本,仅供学习使用。
NULL 博文链接:https://chxiaowu.iteye.com/blog/1276845
NULL 博文链接:https://never-say-never.iteye.com/blog/851923
趣味的移动开发讲解讲解,类似个人笔记,非常容易懂的,有好多勾画图
headfirst 设计模式读书笔记 书很好,浅显易懂,例子生动,适合初学者
设计模式Head First学习笔记,以及使用java编写的设计模式源码,Java原生sdk实现23种设计模式
java原始中的设计模式 Gof设计模式 一个Android应用程序,该应用程序演示了以下来源的GoF设计模式的源代码: E.Freeman,E.Freeman,K.Sierra,B.Bates的书:copyright:O'Reilly 2004 布莱恩·汉森(Bryan Hansen),...