CompositePattern(23种设计模式之一)
2024-09-02 12:01:28
设计模式六大原则(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();
}
}
别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
最新文章
- springMVC之applicationcontext.xml配置说明
- wp8 json2csharp
- nyist 606 ACM之路
- 两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];
- Java - 正则表达式常用操作
- PSP个人软件开发工具需求分析文档
- Android-为何以及如何保存Fragment实例
- ASP.NET动态的网页增删查改
- C#创建和初始化类
- Laravel框架开发规范-修订前期版
- vue-cli中父子组件间的变量传递
- 窗口函数解决数据岛问题(mysql暂无窗口函数,可以通过用户变量解决窗口函数问题)
- Android 开发之Windows环境下Android Studio安装和使用教程
- [转]Ubuntu Precise - Install youtube-dl package using Quantal repo
- Stateful Future Transformation
- visual studio 阅读 linux-kernel
- 关于在WP8.1中使用剪贴板的问题
- 机器学习评价方法 - Recall &; Precision
- ALGO-31_蓝桥杯_算法训练_开心的金明(DP)
- java NIO中的buffer和channel
热门文章
- JVM年轻代(young generation)老年代(old generation tenured)持久代(permanent generation)GC
- Ctrl+H 浪潮Raid配置文档
- mysql 创建用户自定义函数(转可运行)
- css学习笔记之图像
- CentOS 7 Update GCC G++
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
- FPGA前世今生(二)
- SCSI, (P)ATA, SAS, NL-SAS and SATA, what’s the difference?
- Vue.js:条件与循环
- JavaScript笔记——事件