多种设计模式结合Java,java组合模式写法
00-1010 1.基本介绍2。结构3。组合模式4解决的问题。按组合模式5显示学校部门。组合模式的注意事项和细节
00-1010 1)复合模式(Composite Pattern)又称部分整体模式,创建对象组的树形结构,将对象组合成树形结构来表示“整体-部分”的层次关系
2)组合模式根据树形结构组合对象,树形结构用于表示部分和整体级别。
3)这类设计模式属于结构模式。
4)组合模式使用户对单个对象和组合对象的访问保持一致,即组合使客户能够以一致的方式处理单个对象和组合对象。
00-1010组合模式主要包括三个角色:
抽象组件:定义系统各级对象的常用方法和属性,可以预定义一些默认的行为和属性。复合:定义分支节点的行为,存储子节点,将分支节点和叶节点组合成树状结构叶节点(leaf node):叶节点对象,其下没有分支,是系统层次结构遍历的最小单位。
00-1010 1)组合模式解决了这样一个问题。当我们要处理的对象可以生成一个树形结构,我们要操作树上的节点和叶子时,它可以提供一致的方式,不管是节点还是叶子。
2)相应的示意图
00-1010 1)应用示例要求
写一个程序展示一个学校的院系结构:需求是这样的:用一个页面展示学校的院系构成,一个学校有多个学院,一个学院有多个院系。
2)思路分析和图解(类图)
3)代码实现
组件对象声明接口
包com.zte公共抽象类organization component { private String name;//名称私有字符串des//解释公共字符串getname(){ return name;}公共字符串get des(){ return des;} protected void add(organization component organization component){//throw new UnsupportedOperation异常()默认实现;} Protected void remove(organization component organization component){//throw new unsupported operation异常()默认实现;}//构造函数公共组织组件(string name,string des){ this . name=name;this.des=des}//方法print,抽象方法保护的抽象void print();}复合非叶节点
包com.zte导入Java . util . ArrayList;导入Java . util . list;//大学是复合的,可以管理学院公共类大学扩展组织组件{ listroorganizationcomponent Organization Component List=NewArrayList();//constructor public university(string name,string des) {super (name,des);}//重写add @ override protected void add(organization component organization component){ organization component list . add(organization component);}//重写remove @ override protected void remove(organization component organization com
ponent) { organizationComponent.remove(organizationComponent); } @Override protected void print() { System.out.println("==========" + getName() + "========="); for (OrganizationComponent organizationComponent : organizationComponentList) { organizationComponent.print(); } } @Override public String getName() { return super.getName(); } @Override public String getDes() { return super.getDes(); }}Composite非叶子节点
package com.zte;import java.util.ArrayList;import java.util.List;public class College extends OrganizationComponent { // list中存放department List<OrganizationComponent> organizationComponentList = new ArrayList<>(); public College(String name, String des) { super(name, des); } //重写add @Override protected void add(OrganizationComponent organizationComponent) { organizationComponentList.add(organizationComponent); } // 重写remove @Override protected void remove(OrganizationComponent organizationComponent) { organizationComponent.remove(organizationComponent); } @Override protected void print() { System.out.println("==========" + getName() + "========="); for (OrganizationComponent organizationComponent : organizationComponentList) { organizationComponent.print(); } } @Override public String getName() { return super.getName(); } @Override public String getDes() { return super.getDes(); }}
Leaf叶子节点
package com.zte;public class Department extends OrganizationComponent { public Department(String name, String des) { super(name, des); } // add和remove方法就不需要再写了 @Override protected void print() { System.out.println("===========" + getName() + "========="); } @Override public String getName() { return super.getName(); } @Override public String getDes() { return super.getDes(); }}
package com.zte;public class Client { public static void main(String[] args) { // 创建大学 OrganizationComponent university = new University("清华大学", "中国最好的大学"); // 创建学院 OrganizationComponent college1 = new College("计算机学院", "计算机学院"); OrganizationComponent college2 = new College("信息工程学院", "信息工程学院"); // 创建各个学院下面的系 college1.add(new Department("软件工程", "软件工程")); college1.add(new Department("网络工程", "网络工程")); college1.add(new Department("计算机科学与技术", "老牌专业")); college2.add(new Department("通信工程", "通信工程")); college2.add(new Department("信息工程", "信息工程")); // 将学院添加到学校中 university.add(college1); university.add(college2); // 打印大学底下的所有院系 university.print(); // 打印学院底下的所有系 college1.print(); }}
5.组合模式的注意事项和细节
1)简化客户端操作,客户端只需要面对一致的对象而不用考虑整体部分或者节点叶子的问题
2)其有较强的扩展性,当我们需要修改组合对象时,我们只需要调整内部的层次关系,客户端不用做出任何改动
3)方便创建出复杂的层次结构,客户端不用理会组合里面的组成细节,容易添加节点或者叶子从而创建出复杂的树形结构
4)需要遍历组织机构,或者处理的对象具有树形结构时,非常适合使用组合模式
5)要求较高的抽象性,如果节点和叶子有很多差异性的话,比如很多方法和属性都不一样,不适合使用组合模式
到此这篇关于Java设计模式之组合模式深入刨析的文章就介绍到这了,更多相关Java组合模式内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。