设计模式六大原则(1):单一职责原则
设计模式六大原则(2):里氏替换原则
设计模式六大原则(3):依赖倒置原则
设计模式六大原则(4):接口隔离原则
设计模式六大原则(5):迪米特法则
设计模式六大原则(6):开闭原则

CompositePattern,UML抽象图百度找,代码实现如下

使用组合设计模式完成此题,某公司的组织结构采用组合设计模式来设计,得到类图如下。其中Company为抽象类,定义了在组织结构上添加(Add)和删除(Delete)部门的方法接口。类ConcreteCompany表示具体的公司,可以设置不同的部门。类HRDepartment和类FianceDepartment分别表示人力资源部和财务部。编程模拟实现。

抽象构件

package CompositePattern;
public interface Company {
public void add(Company component);
public void delete(Company component);
public String info();
}

构件

package CompositePattern.component;
import CompositePattern.Company;
public class FianceDepartment implements Company{
@Override
public void add(Company component) { }
@Override
public void delete(Company component) { }
@Override
public String info(){
return "我是财务部";
}
}
package CompositePattern.component;
import CompositePattern.Company;
public class HRDepartment implements Company{
@Override
public void add(Company component) {
// TODO Auto-generated method stub }
@Override
public void delete(Company component) {
// TODO Auto-generated method stub
}
@Override
public String info(){
return "我是人力资源部";
} }

根构件(组合的目标)

package CompositePattern;
import java.util.ArrayList;
import java.util.List;
public class ConcreteCompany implements Company{
private List<Company> mylist = new ArrayList<Company>();
@Override
public void add(Company component) {
mylist.add(component);
}
@Override
public void delete(Company component) {
mylist.remove(component);
}
@Override
public String info() {
for(int i=0;i<mylist.size();i++) {
System.out.println(mylist.get(i).info());
}
return "";
}
}

测试类

package CompositePattern;
import CompositePattern.component.FianceDepartment;
import CompositePattern.component.HRDepartment;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//构造公司这个根
Company rootComponent = new ConcreteCompany(); //添加两个叶子几点,也就是子部件
Company leaf1 = new FianceDepartment();
Company leaf2 = new HRDepartment(); rootComponent.add(leaf1);
rootComponent.add(leaf2); rootComponent.info(); }
}

别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。

最新文章

  1. springMVC之applicationcontext.xml配置说明
  2. wp8 json2csharp
  3. nyist 606 ACM之路
  4. 两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];
  5. Java - 正则表达式常用操作
  6. PSP个人软件开发工具需求分析文档
  7. Android-为何以及如何保存Fragment实例
  8. ASP.NET动态的网页增删查改
  9. C#创建和初始化类
  10. Laravel框架开发规范-修订前期版
  11. vue-cli中父子组件间的变量传递
  12. 窗口函数解决数据岛问题(mysql暂无窗口函数,可以通过用户变量解决窗口函数问题)
  13. Android 开发之Windows环境下Android Studio安装和使用教程
  14. [转]Ubuntu Precise - Install youtube-dl package using Quantal repo
  15. Stateful Future Transformation
  16. visual studio 阅读 linux-kernel
  17. 关于在WP8.1中使用剪贴板的问题
  18. 机器学习评价方法 - Recall &amp; Precision
  19. ALGO-31_蓝桥杯_算法训练_开心的金明(DP)
  20. java NIO中的buffer和channel

热门文章

  1. JVM年轻代(young generation)老年代(old generation tenured)持久代(permanent generation)GC
  2. Ctrl+H 浪潮Raid配置文档
  3. mysql 创建用户自定义函数(转可运行)
  4. css学习笔记之图像
  5. CentOS 7 Update GCC G++
  6. VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
  7. FPGA前世今生(二)
  8. SCSI, (P)ATA, SAS, NL-SAS and SATA, what’s the difference?
  9. Vue.js:条件与循环
  10. JavaScript笔记——事件