什么叫组合模式(设计模式)
程序员文章站
2022-03-03 20:09:07
简介又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以 表示“整体-部分”的层次关系。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式。组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以 及组合对象组合模式组合模式public class People1{}聚合模式public class People2{}public class Person{privat...
简介
- 又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以 表示“整体-部分”的层次关系。
- 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
- 这种类型的设计模式属于结构型模式。
- 组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以 及组合对象
组合模式
组合模式
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(); } }
本文地址:https://blog.csdn.net/weixin_44763595/article/details/107875012