b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

解释器模式举例_lua解释器交互模式_动态编译与解释器模式(27)

电脑杂谈  发布时间:2017-02-22 17:29:35  来源:网络整理

其实跟上面的例子大体差不多,如果有这方面的需求,也可以直接使用Java的API。 但可以看到里面还在使用Vector(已过时),这其实是不推荐的,我们可以自己实现观察者模式,如果是多线程中,我们也可以自己实现同步。

13、状态模式(State Pattern)

别名:状态对象(Another Name:Objects for States)

Allow an object to alter its behavior when its internal state changes.The object will appear to change its class.

允许一个对象在其内部状态改变时改变它的行为,对象看起来乎修改了它的类。

何时使用:

一个对象的行为依赖于它的状态,并且它必须在运行时根据状态改变它的行为 。 需要编写大量的条件分支语句来决定一个操作的行为,而且这些条件恰好表示对象的一种状态。

优点:

使用一个类封装对象的一种状态,很容易增加新的状态 在状态模式中,环境(Context)中不必出现大量的条件判断语句。环境(Context)实例所呈现的状态变得更加清晰、容易理解。 使用状态模式可以让用户程序很方便地切换环境(Context)实例的状态。 使用状态模式不会让环境(Context)中的实例中出现内部状态不一致的情况。 当状态对象没有实例变量时,环境(Context)的各个实例可以共享一个状态对象。

用一句话来表述,状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。解释器模式举例

可能这段时间老是在想相关的事儿,所以一想例子就就想到这方面来了...不过,这样大家也能更好的对比设计模式之间的差异,下本例还是与这方面相关的。

设想我们有一个程序,要保存数据的,按照数据(这里以String举例)的大小,使用不同的方式保存。如果数据很小,我们将其保存到Redis(缓存)中,如果不太小也不太大,我们将其保存到mysql中,如果数据非常大,我们直接将其写入到文件中。数据的大小就是一种状态,很适合使用状态模式:

环境:

//环境(Context)public class SaveDataController {    private ISaveData saveData;    public void save(String data){        //为了演示,此处的大的数据其实也是很小的        if(data.length()<1<<2)            saveData = SaveSmallData.instance;        else if(data.length()<1<<4)            saveData = SaveMiddleData.instance;        else            saveData = SaveBigData.instance;        saveData.save(data);    }}

抽象状态:

//抽象状态public intece ISaveData {    void save(Object data);}

具体状态(每个具体状态都使用到了单例模式):

//具体状态public enum SaveSmallData implements ISaveData{    instance;    @Override    public void save(Object data) {        System.out.println("保存到Redis:"  data);    }}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-27.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...