JAVA设计模式之组合模式

来源:互联网 发布:吸入麻醉药1.3mac 编辑:程序博客网 时间:2024/06/08 06:57

组合模式使用的场景
- 把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象
- 组合模式的核心:
- 抽象构建(Component)角色:定义了叶子和容器构件的共同特点
- 叶子构建角色:无子节点
- 容器(Composite)构建角色:有容器特征,可以包含节点

package com.imust.composite;import java.util.ArrayList;import java.util.List;//抽象构建public interface AbstractFile {    void killVirus();//杀毒}class ImageFile implements AbstractFile{    private String name;    public ImageFile(String name){        this.name = name;    }    @Override    public void killVirus() {        System.out.println("--图像文件"+name+"进行查杀");    }}class TextFile implements AbstractFile{    private String name;    public TextFile(String name){        this.name = name;    }    @Override    public void killVirus() {        System.out.println("--文本文件"+name+"进行查杀");    }}class VideoFile implements AbstractFile{    private String name;    public VideoFile(String name){        this.name = name;    }    @Override    public void killVirus() {        System.out.println("--视频文件"+name+"进行查杀");    }}class Folder implements AbstractFile{    private String name;    //定义容器  用来存放本容器构建下的子节点    private List<AbstractFile> list = new ArrayList<AbstractFile>();    public Folder(String name) {        super();        this.name = name;    }    public void add(AbstractFile file){        list.add(file);    }    public void remove(AbstractFile file){        list.remove(file);    }    public AbstractFile getChild(int index){        return list.get(index);    }    @Override    public void killVirus() {        System.out.println("文件夹"+name+"进行查杀");        for (AbstractFile file : list) {            file.killVirus();        }    }}

测试类

package com.imust.composite;public class Client {    public static void main(String[] args) {        AbstractFile f2,f3,f4,f5,f6;        Folder f1 = new Folder("我的收藏");        f2 = new ImageFile("老高的头像");        f3 = new TextFile("hello.txt");        f1.add(f2);        f1.add(f3);        f2.killVirus();        f1.killVirus();    }}

原型

package com.imust.composite;/** * 抽象组件 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月7日 * @project shejimoshi * @package com.imust.composite */public interface Component {    void operation();}//叶子组件interface Leaf extends Component{}//容器组件interface Composite extends Component{    void add(Component c);    void remove(Component c);    Component getChild(int index);}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机丢了支付宝和微信里的钱怎么办 新办的手机号已被注册支付宝怎么办 新办的移动卡不能注册支付宝怎么办 新办的宝卡支付宝注册过怎么办 办支付宝后银行卡被盗刷怎么办 微信扫二维码送平衡群发了怎么办车 拼多多没收到货点了确认收货怎么办 拼多多收货地址填错了怎么办 京东订单申请退款已发货怎么办 手机播放声音的地方进水了怎么办 手机出声音的地方进水了怎么办 手机听声音的地方进水了怎么办 装修公司我只要基装她不肯怎么办 雄迈未来家庭忘记账号和密码怎么办 地方文件和国家政策有冲突怎么办? 网上贷款放款成功没有到账怎么办 我来贷放款中不到账怎么办 手持身份证被别人网贷了怎么办 身份证被别人做了网贷怎么办 身份证丢了被别人网贷了怎么办 户口身份证被注销了网贷怎么办 首付交了贷款办不下来怎么办 付首付后贷款没有批下来怎么办 交了首付贷款没有办下来怎么办 买房交了首付贷款没批下来怎么办 交完首付办不下来贷款怎么办 房子交了首付贷款办不下来怎么办 浦发银行办理房贷流水不够怎么办 房贷审批过程中突然换工作怎么办 建行快贷结清后无额度怎么办 建设银行快贷逾期2个月怎么办 全职速卖通一个月没订单要怎么办 买家点的好评写的差评怎么办 手机流量把话费扣没了怎么办 街电忘记还怎么办3天了 街电1个星期没还怎么办 苹果手机设置密码忘记问题了怎么办 买房付了首付后无法办按揭怎么办 苹果x导入通讯录不显示名字怎么办 苹果切换了id通讯录没有了怎么办 换了id通讯录记录没有了怎么办