【设计模式】--MONOSTATE模式
来源:互联网 发布:会计在职研究生 网络 编辑:程序博客网 时间:2024/06/07 05:53
1 gingleton 单例模式 -->饿汉模式 实现创建实例 懒汉模式是使用时创建,关注行为
2 monostate 模式 关注结构;
3 示例
class Monostate{ private static int itsX = 0; public Monostate(){ } public static int getItsX() { return itsX; } public static void setItsX(int itsX) { Monostate.itsX = itsX; }}
4 好处:1 透明性 (和普通对象没有区别)2 可派生(共享相同的变量)3 多态性(覆盖方法)
代价:1 不可转换性(regular-->monostate) 2 效率问题 (对象的创建和销毁)3 内存占用 4 平台局限性(不能跨多个jvm或者多个工作平台)
5 使用示例 地铁十字门投币使用状态机
public class Turnstile { private static boolean isLocked = true; private static boolean isAlarming = false; private static int itsCoins = 0; private static int itsRefunds = 0; protected final static Turnstile LOCKED = new Locked(); protected final static Turnstile UNLOCKED = new Unlocked(); protected static Turnstile itsState = LOCKED; public void reset() { lock(true); alarm(false); itsCoins = 0; itsRefunds = 0; itsState = LOCKED; } public boolean locked() { return isLocked; } public boolean alarm() { return isAlarming; } //状态子类覆盖 public void coin() { itsState.coin(); } //状态子类覆盖 public void pass() { itsState.pass(); } protected void lock(boolean shouldLock) { isLocked = shouldLock; } protected void alarm(boolean shouldAlarm) { isAlarming = shouldAlarm; } public int coins() { return itsCoins; } public int refunds() { return itsRefunds; } public void deposit() { itsCoins++; } public void refund() { itsRefunds++; } /** * 代表Locked状态机 */ static class Locked extends Turnstile { //投币操作 @Override public void coin() { itsState = UNLOCKED; lock(false); alarm(false); deposit(); } //锁定状态通过 会报警 @Override public void pass() { System.out.println("非法入侵"); alarm(true); } } static class Unlocked extends Turnstile{ //非锁定状态投币会退回硬币 @Override public void coin(){ refund(); } @Override public void pass(){ lock(true); itsState = LOCKED; } } public static void main(String[] args) { Turnstile turnstile = new Turnstile(); turnstile.coin();//投币 Turnstile turnstile1 = new Turnstile(); turnstile1.pass();//通过 turnstile1.pass();//报警 }}
阅读全文
0 0
- 【设计模式】--MONOSTATE模式
- 设计模式(二):MonoState模式
- 设计模式(二):MonoState模式
- Singleton 与 MonoState 模式
- Singleton与MonoState模式
- SINGLETON 模式和MONOSTATE 模式
- Singleton模式和Monostate模式
- Monostate模式——兼谈Singleton模式
- 杂谈Singleton模式,Monostate以及DCL
- PHP 中实现 Singleton 模式和 Monostate 模式
- 四。Singleton模式与MonoState模式 -- 强制单例
- 四。Singleton模式与MonoState模式 -- 强制单例
- [zt] 杂谈Singleton模式,Monostate以及DCL 收藏
- Monostate
- 设计模式----Bridge模式
- 设计模式---Adapter模式
- 模式设计:观察者模式
- 设计模式------工厂模式
- 第十周项目1(2)
- 计算图(Computational Graph)笔记-BPTT
- CMakeList.txt脚本文件及Cmake常用命令
- 打开IIS管理器命令
- 第十周项目1(3)
- 【设计模式】--MONOSTATE模式
- 数据库实验,合肥某工业大学实验内容
- JDBC相关
- 第十周项目1(4)
- QGridLayout
- 前端知识小结
- 数据结构第四周项目5--猴子选大王
- 第十周项目2
- 用户没有动键盘时间