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

简介

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

组合模式

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

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();

	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44763595/article/details/107875012
今日推荐