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

    别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
  • 相关阅读:
    百度网盘免费下载加速
    linux docker 知识点总结
    openwrt 支持 EC200T
    openwrt 如何添加新设备支持
    openwrt DEPEND
    menuconfig kconfig
    golang 汇编
    按值传递
    YAPI认证用户利用Mock功能远程代码执行事件通告
    携程持久化KV存储实践
  • 原文地址:https://www.cnblogs.com/1996jiwei/p/6676441.html
Copyright © 2020-2023  润新知