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();
        
	}
}

别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
posted @ 2017-04-07 08:55  纪伟  阅读(228)  评论(0编辑  收藏  举报