状态模式State(对象行为型)
2017-06-06 10:37
357 查看
参考文档:
1.设计模式书籍;
2. 设计模式 ( 十七) 状态模式State(对象行为型) http://blog.csdn.net/hguisu/article/details/7557252
状态模式State(对象行为型)
理论方面的只是,我这里不多说了,大家可以看看下面这篇文章:
设计模式 ( 十七) 状态模式State(对象行为型) http://blog.csdn.net/hguisu/article/details/7557252
代码实现,为上篇博客中的电梯的案例:
类图:
Client.java:
1.设计模式书籍;
2. 设计模式 ( 十七) 状态模式State(对象行为型) http://blog.csdn.net/hguisu/article/details/7557252
状态模式State(对象行为型)
理论方面的只是,我这里不多说了,大家可以看看下面这篇文章:
设计模式 ( 十七) 状态模式State(对象行为型) http://blog.csdn.net/hguisu/article/details/7557252
代码实现,为上篇博客中的电梯的案例:
类图:
Client.java:
package com.rick.designpattern.state; /** * Created by MyPC on 2017/6/2. */ public class Client { public static void main(String[] args) { Context context = new Context(); context.open(); context.close(); context.open(); // context.run(); context.stop(); context.stop(); context.run(); context.stop(); } }
Context.java:
package com.rick.designpattern.state; /** * Created by MyPC on 2017/6/2. */ public class Context { private OpeningState mOpeningState = new OpeningState(this); private ClosingState mClosingState = new ClosingState(this); private RunningState mRunningState = new RunningState(this); private StoppingState mStoppingState = new StoppingState(this); private LiftState mLiftState; public Context() { setmLiftState(getmStoppingState()); getmLiftState().setmContext(this); } public void open() { mLiftState.open(); } public void close() { mLiftState.close(); } public void run() { mLiftState.run(); } public void stop() { mLiftState.stop(); } public OpeningState getmOpeningState() { return mOpeningState; } public ClosingState getmClosingState() { return mClosingState; } public RunningState getmRunningState() { return mRunningState; } public StoppingState getmStoppingState() { return mStoppingState; } public LiftState getmLiftState() { return mLiftState; } public void setmLiftState(LiftState mLiftState) { this.mLiftState = mLiftState; } }
LiftState.java:
package com.rick.designpattern.state; /** * Created by MyPC on 2017/6/2. */ public abstract class LiftState { private Context mContext; public LiftState(Context mContext) { this.mContext = mContext; } /** * 电梯开门状态处理 */ abstract void open(); /** * 电梯关门状态 */ abstract void close(); /** * 电梯运行状态,如上楼、下楼 */ abstract void run(); /** * 电梯停止状态 */ abstract void stop(); public Context getmContext() { return mContext; } public void setmContext(Context mContext) { this.mContext = mContext; } }
OpeningState.java:
package com.rick.designpattern.state; /** * Created by MyPC on 2017/6/2. */ public class OpeningState extends LiftState { public OpeningState(Context mContext) { super(mContext); } @Override void open() { System.out.println("lift is state in open"); } @Override void close() { getmContext().setmLiftState(getmContext().getmClosingState()); getmContext().close(); } @Override void run() { throw new NullPointerException("lift is state in open"); } @Override void stop() { getmContext().setmLiftState(getmContext().getmStoppingState()); getmContext().stop(); } }
ClosingState.java:
package com.rick.designpattern.state; /** * Created by MyPC on 2017/6/2. */ public class ClosingState extends LiftState { public ClosingState(Context mContext) { super(mContext); } @Override void open() { getmContext().setmLiftState(getmContext().getmOpeningState()); getmContext().open(); } @Override void close() { System.out.println("lift is state in close"); } @Override void run() { getmContext().setmLiftState(getmContext().getmRunningState()); getmContext().run(); } @Override void stop() { getmContext().setmLiftState(getmContext().getmStoppingState()); getmContext().stop(); } }
RunningState.java:
package com.rick.designpattern.state; /** * Created by MyPC on 2017/6/2. */ public class RunningState extends LiftState { public RunningState(Context mContext) { super(mContext); } @Override void open() { throw new NullPointerException("lift is state in run"); } @Override void close() { throw new NullPointerException("lift is state in run"); } @Override void run() { System.out.println("lift is state in run"); } @Override void stop() { getmContext().setmLiftState(getmContext().getmStoppingState()); getmContext().stop(); } }
StoppingState.java:
package com.rick.designpattern.state; /** * Created by MyPC on 2017/6/2. */ public class StoppingState extends LiftState { public StoppingState(Context mContext) { super(mContext); } @Override void open() { getmContext().setmLiftState(getmContext().getmOpeningState()); getmContext().open(); } @Override void close() { getmContext().setmLiftState(getmContext().getmClosingState()); getmContext().close(); } @Override void run() { getmContext().setmLiftState(getmContext().getmRunningState()); getmContext().run(); } @Override void stop() { System.out.println("lift is state in stop"); } }
相关文章推荐
- 设计模式 ( 十七) 状态模式State(对象行为型)
- State状态设计模式(对象行为型)
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 设计模式 之 STATE(状态)实例 —对象行为型模式
- 状态模式State(对象行为型)
- [导入]C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式.zip(6.24 MB)
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 设计模式二十二:state(状态模式)——对象行为型模式
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 设计模式 ( 十七) 状态模式State(对象行为型)
- C#面向对象模式设计第二十二讲:State 状态模式(行为型模式)
- 设计模式二十一:state(状态模式)——对象行为型模式
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 3.8 State(状态) -- 对象行为型模式
- 设计模式 ( 十七) 状态模式State(对象行为型)
- 状态模式--对象行为型模式
- 设计模式19---设计模式之状态模式(State)(行为型)
- PHP设计模式:行为型之状态(State)