码迷,mamicode.com
首页 > 其他好文 > 详细

23种设计模式(19):组合模式

时间:2018-10-05 01:03:20      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:有关   end   delete   this   程序员   项目   使用   参与者   extend   

概述:

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

类型:结构型模式。

类图:

适用性:

1.你想表示对象的部分-整体层次结构。

2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

参与者:

1.Component

为组合中的对象声明接口。

在适当的情况下,实现所有类共有接口的缺省行为。

声明一个接口用于访问和管理Component的子组件。

(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。

2.Leaf

在组合中表示叶节点对象,叶节点没有子节点。

在组合中定义节点对象的行为。

3.Composite

定义有子部件的那些部件的行为。

存储子部件。

在Component接口中实现与子部件有关的操作。

4.Client

通过Component接口操纵组合部件的对象。

例子:


Component 

public abstract class Employer {



    private String name;



    public void setName(String name) {

        this.name = name;

    }



    public String getName() {

        return this.name;

    }



    public abstract void add(Employer employer);



    public abstract void delete(Employer employer);



    public List employers;



    public void printInfo() {

        System.out.println(name);

    }



    public List getEmployers() {

        return this.employers;

    }

}

Leaf 

public class Programmer extends Employer {



    public Programmer(String name) {

        setName(name);

        employers = null;//程序员, 表示没有下属了

    }



    public void add(Employer employer) {



    }



    public void delete(Employer employer) {



    }

}

public class ProjectAssistant extends Employer {



    public ProjectAssistant(String name) {

        setName(name);

        employers = null;//项目助理, 表示没有下属了

    }



    public void add(Employer employer) {



    }



    public void delete(Employer employer) {



    }

}

Composite 

public class ProjectManager extends Employer {



    public ProjectManager(String name) {

        setName(name);

        employers = new ArrayList();

    }



    public void add(Employer employer) {

        employers.add(employer);

    }



    public void delete(Employer employer) {

        employers.remove(employer);

    }

}

Client 

public class Test {



    public static void main(String[] args) {

        Employer pm = new ProjectManager(“项目经理”);

        Employer pa = new ProjectAssistant(“项目助理”);

        Employer programmer1 = new Programmer(“程序员一”);

        Employer programmer2 = new Programmer(“程序员二”);



        pm.add(pa);//为项目经理添加项目助理

        pm.add(programmer2);//为项目经理添加程序员



        List ems = pm.getEmployers();

        for (Employer em : ems) {

            System.out.println(em.getName());

        }

    }

}

result:


项目助理

程序员二

23种设计模式(19):组合模式

标签:有关   end   delete   this   程序员   项目   使用   参与者   extend   

原文地址:https://www.cnblogs.com/yuyu666/p/9743795.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!