追MM 之合成模式实现

简介:
原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://dba10g.blog.51cto.com/764602/230210
这一周,MM 告诉我要我见一次家长。听说,他们家计划生育执行的很不好,人丁兴旺啊。她爷爷就有10 几个儿子,儿子每个儿子又有很多儿子,儿子也有很多儿子。 要我一口气记下来,不累死才怪。还好ME  我学会了合成模式。把所有对象之间的关系,组建成一个树。只要告诉某个人,我立刻可以遍历出她所有的儿子信息来。
 
抽象构件:
package composite; 
 
public  interface People { 
 
   public People getSelf(); //返回自己的实例 
   public String getName(); // 方便测试 
   public  void  operator(); // 业务方法 

 
树叶构件:
package composite; 

public  class Leaf  implements People { 

   private String name; 
    
   public Leaf(String name){ 
     this.name = name; 
  } 
   public People getSelf() { 
     
     return  this
  } 

   public  void operator() { 
     

  } 
   public String getName() { 
     return name; 
  } 


 
3.树枝构件
package composite; 

import java.util.Vector; 

public  class Composite  implements People { 
   private String name; 
   private Vector<People>    sons =     new Vector<People>(); 
   public Composite(String name){ 
     this.name = name; 
  } 
    
   public People getSelf() { 
     return  this
  } 

   public  void add(People son){ 
    sons.add(son); 
  } 
    
    
   public  void operator() { 
     
  } 

   public Vector<People> getSons(){ 
     return sons; 
  } 

   public String getName() { 
     
     return name; 
  } 

 
客户端
package composite; 

import java.util.Enumeration; 
import java.util.Vector; 

public  class Client { 

   /** 
    * @param args 
    */
 
   public  static  void iteratorTree(Composite composite){ 
    Vector<People> sons = composite.getSons(); 
    Enumeration<People> enums = sons.elements(); 
     while(enums.hasMoreElements()){ 
      People son    =enums.nextElement(); 
       if(son  instanceof Composite){ 
        Composite temp = (Composite)son; 
        System.out.println(son.getName()); 
        iteratorTree(temp); 
      } else
        System.out.println(son.getName()); 
      } 
       /* 
        Composite temp = (Composite)son;//ClassCastException 
        System.out.println(son.getName()); 
        iteratorTree(temp); 
      */
 
    } 
  } 
   public  static  void main(String[] args) { 

    Composite root =  new Composite( "爷爷"); 
     
    Composite son1 =  new Composite( "儿子1"); 
    Composite son2 =  new Composite( "儿子2"); 
        
    People grandson11 =  new Leaf( "孙子11"); 
    People grandson112 =  new Leaf( "孙子12"); 
     
    root.add(son1); 
    root.add(son2); 
     
    son1.add(grandson112); 
    son1.add(grandson11); 
     
    iteratorTree(root); 
  } 


 
合成模式: 有两种方式,1.透明式合成模式、2安全式合成模式。
而以上代码 运用的是安全式合成模式。 因为 树枝构件 和树叶构件 虽然实现同一个接口,但是树枝却有很多自己客制化的方法。 如果树枝构件想访问那些方法,会在编译器过程中报错的,更谈不上运行时了。所以说来,是相对安全的。
 
另外一中透明式合成模式: 树叶构件和树枝构件拥有相同的方法,这些方法都是来自于抽象构件。说一说来,对于客户端来说,树叶构件和树枝构件都是一样的,没有区别。这势必造成了如果一个树叶对象,访问了树枝方法,具有危险性。

本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/230210

相关文章
|
5天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1131 2
|
4天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
652 11
|
14天前
|
人工智能 运维 安全
|
5天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
314 0
|
12天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
830 23
|
5天前
|
缓存 供应链 监控
VVIC seller_search 排行榜搜索接口深度分析及 Python 实现
VVIC搜款网seller_search接口提供服装批发市场的商品及商家排行榜数据,涵盖热销榜、销量排名、类目趋势等,支持多维度筛选与数据分析,助力选品决策、竞品分析与市场预测,为服装供应链提供有力数据支撑。