首页 > 设计模式之状态模块加观察者模式

设计模式之状态模块加观察者模式

背景:

用户操作鼠标,涉及的动作有左击、右击、双击。每种动作对应一种状态,状态的切换对应着不同的鼠标点击事件。

类图:

 

状态接口类:

/*** 状态接口**/
public interface State {public void change();
}

 

鼠标移入类:

public class MouseoverState implements State{public void change(){System.out.println("鼠标移入了。");}
}

 

鼠标移出类:

public class MouseoutState implements State{public void change() {System.out.println("鼠标移出了。");}
}

 

鼠标类:

// 被观察者
public class Mouse extends Observable{public enum STATE {MOUSEOVER,MOUSEOUT};private  State state ;public State getState() {return state;}public void setState(State state) {System.out.println("鼠标状态发生了变化。");this.state = state;setChanged() ;notifyObservers(state);}
}

 

用户操作类:

/*** 操作类,同时也是观察者**/
public class User implements Observer{@Overridepublic void update(Observable o, Object arg) {// TODO Auto-generated method stubState state = (State)arg ;state.change() ;}}

 

调用类:

public class Main {public static void main(String[] args) {User user = new User() ;Mouse mouse = new Mouse();State state = new MouseoutState() ;// 添加被观察者
        mouse.addObserver(user);// 状态被改变
        mouse.setState(state);}
}

 

如有不当之处,请给我留言,方便交流与讨论。

 

转载于:https://www.cnblogs.com/xinzhuangzi/p/4101242.html

更多相关:

  • 在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?1、在Startup类中读取json配置文件1、使用Confi...

  •   1 public class FrameSubject extends JFrame {   2    3   …………..   4    5   //因为无法使用多重继承,这儿就只能使用对象组合的方式来引入一个   6    7   //java.util.Observerable对象了。   8    9   DateSub...

  • 本案例主要说明如何使用NSwag 工具使用桌面工具快速生成c# 客户端代码、快速的访问Web Api。 NSwagStudio 下载地址 比较强大、可以生成TypeScript、WebApi Controller、CSharp Client  1、运行WebApi项目  URL http://yourserver/swagger 然后...

  •   在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性.   ModelState 在ApiController中一个ModelState属性用来获取参数验证结果.   public abstract class ApiController : IHttpController,...

  • 1# 引用  C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.dll C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.Presentation.dll 2# 引用命名空间, using Aveva.Applicati...

  • 协议36.508 4.5节 有个表格写的很清楚: Table 4.5.2.3-1: UE registration procedure (state 1 to state 2)...

  • 最近的诸多面试经历确实让自己发现内功还不够,还需要持续的学习精进。 实现如下: class RWLock{private:int state;mutex mu;condition_variable cond;public:RWLock():state(0){}void rlock(){mu.lock();while(state <...

  • 使用栈实现四则运算,支持+,-,*,/,(,) 输入为字符串,输出为计算好的数值,如不符合四则运算的规定,则异常退出 这个实现借用了栈以及字符处理状态机的思想: 维护两个栈:一个用于数值,另一个用于存放计算符号字符状态机用于遍历输入的字符串过程中进行对应数值处理和计算符号处理的状态转换 在第一个思想中:符号栈中存在优先级,即*和...

  •   cursor: url(//img.58cdn.com.cn/resource/xxzl/captcha/pencil.png), default;  ​​​​​​​ /*获取鼠标位置,让提示气泡框跟随鼠标*/ var sgTip=document.querySelector("#sgTip") document.addEv...