当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 什么叫组合模式(设计模式)

什么叫组合模式(设计模式)

2020年08月10日  | 移动技术网IT编程  | 我要评论
简介又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以 表示“整体-部分”的层次关系。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式。组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以 及组合对象组合模式组合模式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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网