CompositePattern(23种设计模式之一)
设计模式六大原则(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();
}
}
别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
CompositePattern(23种设计模式之一)的更多相关文章
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Java开发中的23种设计模式(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- c#中的23种设计模式
C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核 ...
- Java 23种设计模式
转自: http://zz563143188.iteye.com/blog/1847029 ; i<count; i++){ list.add(new MailSender()); } } pu ...
- 从追MM谈Java的23种设计模式(转)
从追MM谈Java的23种设计模式 这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...
- java 23种设计模式及具体例子 收藏有时间慢慢看
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...
- JAVA:23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 从追MM谈Java的23种设计模式
从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...
- 23种设计模式全解析 (java版本)
转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
随机推荐
- 牛客国庆集训派对Day1:J:Princess Principal(栈模拟求括号匹配)
题目描述 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号“白鸽队(Team White Pigeon)”的间谍.在没有任务的时候,她们会进行各种各样的训练,比如快速判断一个文档有没 ...
- 高级C/C++编译技术之读书笔记(五)之动态库版本控制
最近有幸阅读了<高级C/C++编译技术>深受启发,该书深入浅出地讲解了构建过程(编译.链接)中的各种细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码复用和系统集成的软件架 ...
- Python之functools库
functools库用于高阶函数,指那些作用于函数或者返回其他函数的函数 functools提供方法如下: cmp_to_key 将一个比较函数转换关键字函数 partial 针对函数起作用,并且是部 ...
- jstl中的用法
版权声明:本文为博主原创文章,未经博主允许不得转载. 在JSP的开发中,迭代是经常要使用到的操作.例如,逐行的显示查询的结果等.在早期的JSP中,通常使用Scriptlets来实现Iterator或者 ...
- 剑指offer—第三章高质量代码(合并两个排序链表)
题目:输入员两个递增排序的链表,合并这两个链表并使新的链表中的结点仍然是按照递增排序的. 思路:首先,定义两个头节点分别为Head1和Head2的链表,然后比较第一个节点的值,如果是Head1-> ...
- Web应用程序与Web网站及部署在IIS中
在Visual Studio可以创建 Web 应用程序项目或网站项目.通过选择 新建项目 或 打开项目 创建或打开一个 Web 应用程序项目在Visual Studio 文件 菜单. 通过选择 新建网 ...
- LibreOJ β Round #2 题解
LibreOJ β Round #2 题解 模拟只会猜题意 题目: 给定一个长为 \(n\) 的序列,有 \(m\) 次询问,每次问所有长度大于 \(x\) 的区间的元素和的最大值. \(1 \leq ...
- sqlalchemy在pythonweb中开发的使用(基于tornado的基础上)
一.关于SQLAlchemy的安装pip install SQLAlchemy安装如果上面的方式安装不成功的情况可以使用下面的方法 百度下载window或者linux下面对应的sqlalchemy的版 ...
- POJ1742:Coins
浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:http://poj.org/problem?id=1742 多重背包,每个物 ...
- ubuntu 设置固定DNS
1.打开 xxx@ubuntu:~$ sudo vim /etc/resolvconf/resolv.conf.d/base 2.输入以下DNS,保存退出. nameserver 8.8.8.8 na ...