组合设计模式2

来源:互联网 发布:下载个视频软件 编辑:程序博客网 时间:2024/05/17 08:28
/** * 在某些情况下,数据呈树形,但是每个树节点节点的类型不一定相同 * 这种情况下可以构建抽象的父类让各节点的类型继承, * 再利用组合设计模式进行构造数据 * @author  * @version 0.1 */abstract class MusicClass {    public String name;    public ArrayList<MusicClass> list;    //抽象的添加方法    public abstract void add(MusicClass component);    //抽象的删除方法    public abstract void remove(MusicClass component);    //展示所有子节点    public abstract void display();}class Song extends MusicClass{    //使用组合模式,请构造Song类,歌曲:+name    public Song(){}    public Song(String name){        this.name = name;    }       //重写父类添加方法    @Override    public void add(MusicClass component) {        list.add(component);    }    //重写父类删除方法    @Override    public void remove(MusicClass component) {        list.remove(component);    }    //重写父类展示方法    @Override    public void display() {        Iterator<MusicClass> iterator = list.iterator();        while (iterator.hasNext()){            System.out.println(iterator.next().name);        }    }}class ConcreteMusicClass extends MusicClass{    //使用组合模式,构造ConcreteMusicClass类,并打印歌手名称    public ConcreteMusicClass (){    }    public ConcreteMusicClass(String name){        this.name = name;        this.list = new ArrayList<MusicClass>();    }    //重写父类添加方法    @Override    public void add(MusicClass component) {        list.add(component);    }    //重写父类删除方法    @Override    public void remove(MusicClass component) {        list.remove(component);    }    //重写父类展示方法    @Override    public void display() {        Iterator<MusicClass> iterator = list.iterator();        while (iterator.hasNext()){            System.out.println(iterator.next().name);        }    }}public class CompositeTest {    public static void main(String args[]){        //创建Song类型的子节点        Song song1=new Song("七里香");        Song song2=new Song("东风破");        //创建ConcreteMusicClass类型的子节点        ConcreteMusicClass concreteMusicClassZhou=new ConcreteMusicClass("周杰伦");                Song song3=new Song("我的歌声里");        Song song4=new Song("jar of love");        ConcreteMusicClass concreteMusicClassQu=new ConcreteMusicClass("曲婉婷");        //创建root节点        ConcreteMusicClass root=new ConcreteMusicClass("root");        concreteMusicClassZhou.add(song1);        concreteMusicClassZhou.add(song2);        concreteMusicClassQu.add(song3);        concreteMusicClassQu.add(song4);        root.add(concreteMusicClassZhou);        root.add(concreteMusicClassQu);        root.display();    }}

原创粉丝点击