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

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

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

输出:

网络存储:数据 存储到网络存储:数据 存储到文件本地存储:数据 存储到本地存储:数据 存储到文件

而且这个程序是很容易扩展的,直接添加细化抽象和具体实现就可以了。

23、装饰模式(Decorator Pattern)

别名:包装器(Wrapper)

动态的给对象添加额外的职责。就功能来说,装饰模式比生产子类更为灵活。

何时使用

程序希望动态的增强类的某对对象的功能,而不影响其他对象时 采用继承来增强对象功能不利于系统的扩展和维护时

优点

被装饰者和装饰者是松耦合关系。 满足开-闭原则 可以使用多个具体装饰器装饰具体组件的实例

装饰模式使用被装饰类的一个子类的实例,把客户端的调用委派到被装饰类,装饰模式的关键在于这种扩展是完全透明的。装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为。

例如,我们有一个工具,用于持久化数据的,最开始设计的功能时是将数据持久化到本地文件,但现在部分数据需要同时持久化到,再后来,又有数据需要同时持久化到网络上的位置,而我们是不能改之前的实现的,因为后面这些需求,只是针对部分数据的,所以我们理所当然就可以使用装饰器模式了。

数据持久化接口(抽象组件)如下:

//被装饰者接口public intece IPersistentUtil {    void persistentMsg(String msg);}

其最初的实现(具体组件)如下:

//具体的被装饰者public class PersistentUtil implements IPersistentUtil{    @Override    public void persistentMsg(String msg) {        System.out.println(msg  " 存入文件");    }}

首先需要抽象一个装饰器,我们不能直接使用它(即使使用匿名内部类使用了它,也跟最初的实现效果一样,没有意义),因为他是一个抽象类(装饰):

//装饰public abstract class PersistentDecorator implements IPersistentUtil {    IPersistentUtil iPersistentUtil;    public PersistentDecorator(IPersistentUtil iPersistentUtil){        this.iPersistentUtil = iPersistentUtil;    }    @Override    public void persistentMsg(String msg) {        iPersistentUtil.persistentMsg(msg);    }}

然后,我们添加一个装饰器,可以同时实现数据持久化到(具体装饰):

//装饰--存入public class PersistentDbDecorator extends PersistentDecorator {    public PersistentDbDecorator(IPersistentUtil iPersistentUtil){        super(iPersistentUtil);    }    @Override    public void persistentMsg(String msg) {        iPersistentUtil.persistentMsg(msg);        persistentToDb(msg);    }    private void persistentToDb(String msg){        System.out.println(msg  " 存入");    }}


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

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

    • 刘垚
      刘垚

      朝鲜人民认为他们是世界上最幸福的人

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