zoukankan      html  css  js  c++  java
  • 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();
            
    	}
    }
    

    别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
  • 相关阅读:
    (转)Mat, vector<point2f>,Iplimage等等常见类型转换
    人脸检测与识别的趋势和分析
    经典网络LeNet5看卷积神经网络各层的维度变化
    C++: int int& int * int**的区别、联系和用途
    c++从txt中读取数据,数据并不是一行路径(实用)
    Spyder常用快捷键
    批量读写变换图片(转)
    OpenCV属性页配置问题~
    视觉目标检测和识别之过去,现在及可能(2017.06.28)
    数据库---SQL Server
  • 原文地址:https://www.cnblogs.com/1996jiwei/p/6676441.html
Copyright © 2011-2022 走看看