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

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

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

Book适配器(类适配器):

//适配器public class BookAdapter extends Book implements Iterable<String>{    @Override    public Iterator<String> iterator() {        return new IteratorAdapter(getEnum());    }}

那么客户端就能直接使用了,但Book books = new BookAdapter();需改为BookAdapter books = new BookAdapter();也就是不直接访问对象,而访问提供的适配器即可。

18、组合模式(Composite Pattern)

Compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat individual objects and compositions of objects uniformly.

将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使用户对单个对象和组合对象的使用具有一致性。

何时使用:

当想表示对象的部分-整体层次结构。 希望用户用一致的方式处理个体对象和组合对象。

优点:

组合模式中包含个体对象和组合对象,并形成树形结构,使用户可以方便地处理个体对象和组合对象。 组合对象和个体对象实现了相同的接口,用户一般无须区分个体对象和组合对象。 当增加新的Composite节点和Leaf节点时,用户的重要代码不需要做出修改。

组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念 ,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式让你可以优化处理递 归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是电脑的文件系统。下面我们就以这个例子来介绍组合模式(虽然我们直接使用Tree这种数据结构也能直接描述)。

一个文件系统中,有目录,目录下有文件和目录

目录和文件的抽象接口(抽象组件):

//抽象组件public intece Component {    void addFile(Component file);    Component addFolder(Component folder);    void removeFile(Component file);    void removeFolder(Component folder);    List<Component> getFiles();    List<Component> getFolders();    List<Component> getAll();    Iterator<Component> iterator();    void display();}

目录(Composite节点):

public class Folder implements Component {    private String name;    private List<Component> files;    private List<Component> folders;    public Folder(String name){        this.name = name;        files = new ArrayList<Component>();        folders = new ArrayList<Component>();    }    @Override    public void addFile(Component file) {        files.add(file);    }    @Override    public Component addFolder(Component folder) {        folders.add(folder);        return this;    }    @Override    public void removeFile(Component file) {        files.remove(file);    }    @Override    public void removeFolder(Component folder) {        folders.remove(folder);    }    @Override    public List<Component> getFiles() {        return files;    }    @Override    public List<Component> getFolders() {        return folders;    }    @Override    public List<Component> getAll() {        List<Component> all = new ArrayList<Component>(folders);        all.addAll(files);        return all;    }    @Override    public Iterator<Component> iterator() {        List<Component> all = new ArrayList<Component>();        add(all,this);        return all.iterator();    }    private void add(List<Component> all,Component component){        if(component==null) return;        all.add(component);        Iterator<Component> iterator = component.getFolders().iterator();        while(iterator.hasNext()){            add(all,iterator.next());        }        all.addAll(component.getFiles());    }    @Override    public void display() {        System.out.println(name);    }}


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

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

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