23种设计模式-组合模式

基本介绍:

  1. 反应整体和部分的关系
  2. 组合模式依据树形结构来组合对象,用来表示部分以及整体层次

在这里插入图片描述

public abstract class OrganizationComponent {
    private String name;
    private String des;

    public OrganizationComponent(String name, String des) {
        this.name = name;
        this.des = des;
    }

    protected void add(OrganizationComponent organizationComponent){
        throw new UnsupportedOperationException();
    }

    protected void remove(OrganizationComponent organizationComponent){
        throw new UnsupportedOperationException();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDes() {
        return des;
    }

    public void setDes(String des) {
        this.des = des;
    }

    //方法print,做成抽象的,子类都需要实现
    protected abstract void print();
}

public class University extends OrganizationComponent {
    List<OrganizationComponent> organizationComponents=new ArrayList<OrganizationComponent>();

    public University(String name, String des) {
        super(name, des);
    }

    @Override
    protected void add(OrganizationComponent organizationComponent) {
        organizationComponents.add(organizationComponent);
    }

    @Override
    protected void remove(OrganizationComponent organizationComponent) {
        organizationComponents.remove(organizationComponent);
    }

    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public String getDes() {
        return super.getDes();
    }

    @Override
    protected void print() {
        System.out.println("---------------------"+getName()+"-----------------------");
        for (OrganizationComponent organizationComponent:organizationComponents){
            organizationComponent.print();
        }
    }
}

public class College extends OrganizationComponent {

    List<OrganizationComponent> organizationComponents=new ArrayList<OrganizationComponent>();

    public College(String name, String des) {
        super(name, des);
    }

    @Override
    protected void add(OrganizationComponent organizationComponent) {
        organizationComponents.add(organizationComponent);
    }

    @Override
    protected void remove(OrganizationComponent organizationComponent) {
        organizationComponents.remove(organizationComponent);
    }

    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public String getDes() {
        return super.getDes();
    }

    @Override
    protected void print() {
        System.out.println("---------------------"+getName()+"-----------------------");
        for (OrganizationComponent organizationComponent:organizationComponents){
            organizationComponent.print();
        }

    }
}

public class Department extends OrganizationComponent {

    public Department(String name, String des) {
        super(name, des);
    }

    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public String getDes() {
        return super.getDes();
    }

    @Override
    protected void print() {
        System.out.println(getName());

    }
}

public class Client {
    public static void main(String[] args) {
        OrganizationComponent university = new University("清华大学","中国顶级大学");
        OrganizationComponent computerCollege = new College("计算机学院","计算机学院");
        OrganizationComponent infoEngineercollege = new College("信息工程学院","信息工程学院");
        computerCollege.add(new Department("软件工程","软件工程不错"));
        computerCollege.add(new Department("网络工程","网络工程不错"));
        infoEngineercollege.add(new Department("信息工程","信息工程不错"));
        infoEngineercollege.add(new Department("通信工程","通信工程不错"));
        university.add(computerCollege);
        university.add(infoEngineercollege);
        university.print();
    }
}

组合模式就是对聚合的使用,在学院和部门间再加一个组组织,不需要修改原先内容,很好的实现了扩展,开闭原则。

回顾七大原则:
单一职责原则:一个类一个职责
接口隔离原则:没有接口
依赖倒转原则:用抽象类不用具体子类
里氏替换原则:不重写父类的方法,这里add和remove本身应该写成抽象,因为叶子节点不需要重写这两个方法,所以就没有抽象,后面不同composite(非叶子节点)具体重写成自己的需要,add和remove写在父类中虽然不是抽象,但是还是抽象思想的作用。
迪米特法则:没有使用间接对象,属性私有化,继承用protect
开闭原则:在学院和部门间再加一个组织,不需要修改原先内容
组合复用原则:用合成/聚合代替继承,组合模式其实就是对聚合的使用,就是为了满足组合复用原则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值