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

解释器设计模式_lua解释器交互模式_解释器模式c语言(20)

电脑杂谈  发布时间:2017-02-22 18:11:38  来源:网络整理

访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。

优点:

符合单一职责原则。

优秀的扩展性。

灵活性。

缺点:

具体元素对访问者公布细节,违反了迪米特原则。

具体元素变更比较困难。

违反了依赖倒置原则,依赖了具体类,没有依赖抽象。

使用场景:

对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。

需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类。

public intece Visitable {
    void accept(Visitor v);
}
public class ConcreteElementA implements Visitable {
    @Override
    public void accept(Visitor v) {
        v.visit(this);
    }

    public void operate() {
        System.out.println("ConcreteElementA ....");
    }
}
public class ConcreteElementB implements Visitable {
    @Override
    public void accept(Visitor v) {
        v.visit(this);
    }

    public void operate() {
        System.out.println("ConcreteElementB ....");
    }
}
public intece Visitor {
    void visit(ConcreteElementB able);

    void visit(ConcreteElementA able);
}
public class ConcreteVisitorA implements Visitor {
    @Override
    public void visit(ConcreteElementB able) {
        able.operate();
    }

    @Override
    public void visit(ConcreteElementA able) {
        able.operate();
    }
}
public class ConcreteVisitorB implements Visitor {

    @Override
    public void visit(ConcreteElementB able) {

    }

    @Override
    public void visit(ConcreteElementA able) {

    }
}
public class Client {
    public static void main(String[] args) {

        Visitor v1 = new ConcreteVisitorA();
        List<Visitable> list = new ArrayList<>();
        list.add(new ConcreteElementA());
        list.add(new ConcreteElementB());

        for(Visitable able :list){
            able.accept(v1);
        }

    }
}

其实在工作中,我们会使用到很多设计模式。可能有时候你并不知道它是一种设计模式,只是你觉得这样使用比较方便。所以,系统的学习并尝试去使用设计模式的组合,养成一种良好的设计习惯,是很有必要的。

除了上述23种常规设计模式外,还衍生出了一些其它的设计模式。后续文章中会慢慢讲到


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

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

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