設計模式之 狀態模式
阿新 • • 發佈:2021-09-06
狀態模式指給物件定義不同的狀態,併為不同的狀態定義不通的行為,在物件的狀態發生變換時自動切換狀態行為。
狀態模式把受環境改變的物件行為包裝在不同的物件裡,用於讓一個物件在其內部狀態改變時,行為也隨之改變。
(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(); }