您的位置:首页 > 其它

状态模式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:

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");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式