zoukankan      html  css  js  c++  java
  • 组合模式

    设计模式的意义在于:面向业务内容、业务数据结构和系统架构,高内聚低耦合、优雅的将平面逻辑立体化。

     1 package designPattern;
     2 import java.util.ArrayList;
     3 import java.util.List;
     4 
     5 /**
     6  * 组合模式
     7  * @author Administrator
     8  */
     9 public class B11_CompositeTest {
    10 
    11     /**
    12      * 将对象组合成树形结构以表示部分-整体的层次结构.composite使得用户对单个对象和组合对象的使用具有一致性
    13      * 适用于:
    14      * 1,你想表示对象的部分-整体结构
    15      * 2,你希望用户忽略组合对象和单个对象的不同,用户将统一的使用组合结构中的所有对象.
    16      */
    17     public static void main(String[] args) {
    18         Employer e=new ProjectManager("项目经理");
    19         Employer e2=new ProjectAssistant("项目助理");
    20         Employer e3=new Programmer("程序员");
    21         e.add(e2);
    22         e.add(e3);
    23         List<Employer> empList=e.getEmployers();
    24         for (int i = 0; i < empList.size(); i++) {
    25             System.out.println(i+": "+empList.get(i).getName());
    26         }
    27     }
    28 }
    29 //1,Component  为组合中的对象声明接口。 在适当的情况下,实现所有类共有接口的缺省行为。
    30 //声明一个接口用于访问和管理Component的子组件。(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。
    31 abstract class Employer
    32 {
    33     private String name;
    34 
    35     public String getName() {
    36         return name;
    37     }
    38     public void setName(String name) {
    39         this.name = name;
    40     }
    41     public abstract void add(Employer e);
    42     public abstract void delete(Employer e);
    43     public List<Employer> employers;
    44     public void printInfo() {
    45         System.out.println(this.name);
    46     }
    47     public List<Employer> getEmployers()
    48     {
    49         return this.employers;
    50     }
    51 }
    52 //2,leaf   在组合中表示叶节点对象,叶节点没有子节点。在组合中定义节点对象的行为。
    53 class Programmer extends Employer
    54 {
    55     public Programmer(String name) {
    56         setName(name);
    57         employers=null;
    58     }
    59     public void add(Employer e) {
    60         
    61     }
    62     public void delete(Employer e) {        
    63         
    64     }    
    65 }
    66 class ProjectAssistant extends Employer
    67 {
    68     public ProjectAssistant(String name) {
    69         setName(name);
    70         employers=null;
    71     }
    72     public void add(Employer e) {
    73         
    74     }
    75     public void delete(Employer e) {        
    76         
    77     }    
    78 }
    79 //Composite 定义有子部件的那些部件的行为。存储子部件。在Component接口中实现与子部件有关的操作。
    80 class ProjectManager extends Employer
    81 {
    82     public ProjectManager(String name) {
    83         super();
    84         setName(name);
    85         employers=new ArrayList<Employer>();
    86     }
    87     public void add(Employer e) {
    88         employers.add(e);        
    89     }
    90     public void delete(Employer e) {
    91         employers.remove(e);        
    92     }
    93 }

    环境:JDK1.6,MAVEN,tomcat,eclipse

    源码地址:http://files.cnblogs.com/files/xiluhua/designPattern.rar

    欢迎亲们评论指教。

  • 相关阅读:
    递归判断多维数组中对象是否有值
    Web前端开发 --》 如何实现页面同时在移动端和pc端的兼容问题
    使用 yield 减少内存消耗
    git 中断 merge
    laravel 命令行测试 Uncaught ReflectionException: Class config does not exist
    laravel 单元测试设置模拟时间
    laravel 单元测试设置模拟时间
    php Mockery 错误 "call_user_func_array() expects parameter 1 to be a valid callback, class 'MockeryExpectation' does not have a method"
    git 创建空提交
    RabbitMQ 客户端开发向导
  • 原文地址:https://www.cnblogs.com/xiluhua/p/4413763.html
Copyright © 2011-2022 走看看