组合模式(设计模式学习)

简介

  • 又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以 表示“整体-部分”的层次关系。
  • 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
  • 这种类型的设计模式属于结构型模式。
  • 组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以 及组合对象

组合模式

在这里插入图片描述
组合模式

public class People1{
	
}

聚合模式

public class People2{
	
}
public class Person{
	private People1 people1  = new People1();//组合关系
	private People2 people2;//聚合关系
}
  • 例题:

    编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系。

  • 类图分析

在这里插入图片描述
Organization 类 做成抽象方法

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

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

	protected void add(Organization or) {
		throw new UnsupportedOperationException();
	}

	protected void remove(Organization or) {
		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;
	}


	protected abstract void print();

}

School类

import java.util.ArrayList;
import java.util.List;

public class School extends Organization {

	List<Organization> sc = new ArrayList<Organization>();

	public School(String name, String des) {
		super(name, des);
		// TODO Auto-generated constructor stub
	}

	@Override
	public String getDes() {
		// TODO Auto-generated method stub
		return super.getDes();
	}

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return super.getName();
	}

	@Override
	protected void add(Organization or) {
		// TODO Auto-generated method stub
		sc.add(or);
	}

	@Override
	protected void remove(Organization or) {
		// TODO Auto-generated method stub
		sc.remove(or);
	}

	@Override
	protected void print() {
		System.out.println(getName()+getDes());
		for (Organization organization : sc) {
			organization.print();
		}

	}

}

College类

import java.util.ArrayList;
import java.util.List;

public class College extends Organization {
	List<Organization> list = new ArrayList<Organization>();

	public College(String name, String des) {
		super(name, des);
		// TODO Auto-generated constructor stub
	}

	@Override
	public String getDes() {
		// TODO Auto-generated method stub
		return super.getDes();
	}

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return super.getName();
	}

	@Override
	protected void add(Organization or) {
		// TODO Auto-generated method stub
		list.add(or);
	}

	@Override
	protected void remove(Organization or) {
		// TODO Auto-generated method stub
		list.remove(or);
	}

	@Override
	protected void print() {
		System.out.println(getName()+getDes());
		for (Organization organization : list) {
			organization.print();
		}
	}

}

Department类,不需要再重写add和remove方法

public class Department extends Organization {
	
	

	public Department(String name, String des) {
		super(name, des);
		// TODO Auto-generated constructor stub
	}

	@Override
	public String getDes() {
		// TODO Auto-generated method stub
		return super.getDes();
	}

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return super.getName();
	}

	

	@Override
	protected void print() {
		
	System.out.println(getName() + "描述:" +getDes());
	
	}

}

Client客户端

public class Client {
	public static void main(String[] args) {
		// 创建学校
		Organization sc = new School("XXX", "School");
		// 创建学院
		Organization c = new College("XXX", "College");
		// 创建学科
		Organization d = new Department("XXX", "Department");

		c.add(new Department("111", "1"));
		c.add(new Department("222", "2"));
		c.add(new Department("333", "3"));
		
		sc.add(c);

		sc.print();
		c.print();

	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐 昊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值