1. 程式人生 > 其它 >設計模式之 狀態模式

設計模式之 狀態模式

狀態模式指給物件定義不同的狀態,併為不同的狀態定義不通的行為,在物件的狀態發生變換時自動切換狀態行為。

狀態模式把受環境改變的物件行為包裝在不同的物件裡,用於讓一個物件在其內部狀態改變時,行為也隨之改變。

(1)定義抽象狀態

public abstract class AbstractState{
    public abstract void action(Context context);
}

(2)定義狀態

public class HolidayState extends AbstractState{
    private  final static Log logger = LogFactory.getLog(this
.getClass()); @Override public void action(Context context) { logger.info("state change to holiday state"); } } public class WorkState extends AbstractState{ private final static Log logger = LogFactory.getLog(this.getClass()); @Override public void action(Context context) { logger.info(
"state change to work state"); } }

(3)定義上下文用於儲存狀態和執行不同狀態下的行為

public class Context{
    private AbstractState state;
    public Context(AbstractState state){
        this.state = state;
    }
    
    public void setState(AbstractState state) {
        this.state = state;
    }
    
    public AbstractState getState() {
        
return state; } public void action(){ this.state.action(this); } }

(4)使用狀態模式

public static void main(String[] args){
    Context context = new Context(new WorkState());
    context.action();
    
    context.setState(new HolidayState());
    context.action();
}