入门设计模式之合成

学习更多设计模式请参考:入门设计模式之汇总篇

合成模式的职责是将对象组织到树结构中

观察上方类图:

  • interface,一个接口定义了一个获得当前对象名字的方法
  • leaf:树中的叶子节点,实现了interface
  • Branch:树枝节点,不仅实现了getName方法,同样它本身具有添加节点删除节点的方法且本身可以包含多个树枝节点以及叶子节点

通过上述结论我们可以发现其实合成模式就是树的结构的实现

来看一下代码:

public interface Compent {
    public String getName();

}
public class Branch implements Compent {
    private List<Compent> compent;

    @Override
    public String getName() {
        return "this name";
    }
    public void add() {
        //内部实现
    }
    public void remove() {
        //内部实现
    }
}

public class Leaf implements Compent {
    @Override
    public String getName() {
        return "this name";
    }
}

原文地址:https://www.cnblogs.com/zhixiang-org-cn/p/9249016.html

时间: 2024-10-16 23:16:08

入门设计模式之合成的相关文章

入门设计模式之桥梁

学习更多设计模式请参考:入门设计模式之汇总篇 桥梁模式:将抽象化与实现化脱藕,使二者可以独立的变化 大家应该对日志记录比较熟悉,不知道有没有自己写过一个日志处理的程序,你又是如何实现的呢? 今天的桥梁模式就根据一下需求来分析一下: 支持2个以上平台 支持2个以上格式 大家可以看一下这个需求哈,2个以上,那我就实现2个呗,一般人可能都会这样想.然后开始写,比如Windows存Txt格式.Windows存Xml格式.Linux存Txt格式的.Linux存Xml格式的,刷刷刷分分钟的就写好了. 但是如

入门设计模式之观察者

学习更多设计模式请参考:入门设计模式之汇总篇 观察者模式:多个观察者对象同时观察一个主题对象,当这个主题对象发生变化时,会通知所有的观察者 来看一下下方类图 Subject:主题类,所有主题的父类,负责对观察者的管理,有添加观察者,删除观察者,通知所有的方法 SubjectImpl:主题子类,拥有状态属性,当状态改变时会调用父类的notifyObserver方法通知所有观察者 Observe:观察者,定义了接受主题变化通知的方法 ObserveImpl:观察者实现类,实现了update()方法用

入门设计模式之模板

学习更多设计模式请参考:入门设计模式之汇总篇 模板方法:在一个抽象类中定义一部分的实现,其余的定义抽象方法迫使子类实现 相信看了上方的定义以后大家已经理解了模板模式,我们来看一下类图 抽象类定义了4个方法,其中operation是私有的,在这个方法里调用了其他三个方法,而方法3是自己实现的.方法1和2是强迫子类实现的. ClassImpl1,ClassImpl2都继承了抽象类,并分别对方法1和2进行了不同的实现 我们来看代码 public abstract class AbstractClass

入门设计模式之单例

学习更多设计模式请参考:入门设计模式之汇总篇 了解单例模式之前我们先来了解一下单例模式的三个要点: 1.一个类只能有一个实例(就是只需要new一次呗) 2.它必须自行创建这个实例(就是构造方法不对外暴露呗) 3.它必须向整个系统提供这个实例(就是获取实例的方法是静态的呗) 其实通过分析上方三个要点我们就已经了解了单例模式了.也就是说我们只要满足上方的要求就算是一个单例了. 按照上方的要点这里给出几个例子供大家参考一下: 饿汉式: public class HungrySingle { priva

入门设计模式之享元

学习更多设计模式请参考:入门设计模式之汇总篇 享元模式:以共享的方式高效的支持大量的细粒度对象 我们以咖啡为例,一家咖啡店一天卖出几千杯咖啡其实这几千杯也不过是几十种口味.在Java中你觉得是new几千次咖啡好还是new几十次口味好呢?享元模式就是利用的这个原理来共享的变量了. 来看一下类图: FlavorFactory:口味工厂,根据客户所需口味生产咖啡 Client:售货员,负责通知工厂生产咖啡,以及出售咖啡和统计销售情况 Coffee:咖啡接口 Flavor:咖啡口味,实现了咖啡接口,并且

入门设计模式之策略

学习更多设计模式请参考:入门设计模式之汇总篇 策略模式:使算法在不影响客户端的情况下发生变化. 例如某宝上的一件商品,有时候8折并返现3元.有时候7折返现1元.有时候9折不返现.有时候不打折返现2元等等,我们可以看到这个商品不同时刻要计算利润或者什么的时候是不一样的,现在就可以用到策略模式了. 代码: public abstract class Algorithm { public abstract void method(); } public class Algorithm1 extends

入门设计模式之代理

学习更多设计模式请参考:入门设计模式之汇总篇 代理模式;给某个对象提供一个代理对象,由代理对象持有对原对象的引用. 代理模式就比较符合中国人含蓄的性格,假如有个姑娘想要找个对象,但是直接满大街去喊我要找对象的不是很多吧.大部分的女孩还是倾向于先去找一个媒人,让媒人来给自己介绍对象.这里的媒人其实就是女孩的代理对象了. 先来看一下类图: 我们可以看到女孩跟媒人都实现了一个相亲的接口,然后呢媒人持有女孩的引用来调用女孩展示自己的方法,代码是这样的: public interface BlindDat

入门设计模式之原型

学习更多设计模式请参考:入门设计模式之汇总篇 引言:通过给出一个原型对象来指明所创建的对象的类型,然后复制这个原型对象来创作同类型的对象 Java中使用原型模式必须要满足的条件如下: 1.对于任何对象都有x.clone()!=x .(也就是说克隆的对象和原先的对象不是一个对象) 2.x.clone().getClass()==x.getClass().(克隆出来的对象跟被克隆的对象是类型一样) 3.x.clone().equals(x).(克隆对象的属性应该是与被克隆的对象的属性完全一样的) 一

入门设计模式之装饰

学习更多设计模式请参考:入门设计模式之汇总篇 装饰模式:以对客户端透明的方式扩展对象的功能 装饰模式类图如下: 我们分析一下类图: Girl:女孩接口,定义了一个getName()方法 XiaoWang:女孩的实现类,她实现了getName方法, Decorator:装饰类,当我们想要扩展小王的方法时,又不能改变她的代码,也不推荐使用继承,那么这个时候装饰类就上场了.此装饰类对小王进行了包装,由他来提供小王的方法 Decorator1,Decorator2:当我们想要对小王装饰的时候就可以使用此