【java设计模式】【结构模式Structural Pattern】合成模式Composite Pattern
package com.tn.pattern;
import java.util.Vector;
public class Client {
public static void main(String[] args) {
Component china=new Composite("中国");
Component jiangsu=new Composite("江苏");
Component anhui=new Composite("安徽");
Component nanjing=new Leaf("南京");
Component suzhou=new Leaf("苏州");
Component hefei=new Leaf("合肥");
Component wuhu=new Leaf("芜湖");
Component maanshan=new Leaf("马鞍山");
Component beijing=new Leaf("北京");
Component shanghai=new Leaf("上海");
Component tianjing=new Leaf("天津");
Component chongqing=new Leaf("重庆");
china.add(beijing);
china.add(shanghai);
china.add(tianjing);
china.add(chongqing);
china.add(jiangsu);
china.add(anhui);
jiangsu.add(nanjing);
jiangsu.add(suzhou);
anhui.add(hefei);
anhui.add(wuhu);
anhui.add(maanshan);
china.getChild();
System.out.println("---------------------------");
jiangsu.getChild();
System.out.println("---------------------------");
anhui.getChild();
System.out.println("---------------------------");
beijing.doSth();
shanghai.doSth();
tianjing.doSth();
chongqing.doSth();
System.out.println("---------------------------");
nanjing.doSth();
suzhou.doSth();
System.out.println("---------------------------");
hefei.doSth();
wuhu.doSth();
maanshan.doSth();
}
}
interface Component{
void doSth();
void add(Component component);
void getChild();
}
class Leaf implements Component{
private String name;
public Leaf(String name){
this.name=name;
}
@Override
public void doSth() {
System.out.println(name+" Leaf doSth()");
}
public void add(Component component){}
public void getChild(){}
}
class Composite implements Component{
private String name;
public Composite(String name){
this.name=name;
}
private Vector<Component> components=new Vector<Component>();
@Override
public void doSth() {
System.out.println(name+" Composite doSth()");
}
public void add(Component component){
components.addElement(component);
}
public void remove(Component componet){
components.removeElement(componet);
}
public void getChild(){
for(Component component:components){
if(component instanceof Leaf){
component.doSth();
}else{
component.doSth();
component.getChild();
}
}
}
}
【java设计模式】【结构模式Structural Pattern】合成模式Composite Pattern的更多相关文章
- 【编程思想】【设计模式】【结构模式Structural】组合模式composite
Python版 https://github.com/faif/python-patterns/blob/master/structural/composite.py #!/usr/bin/env p ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- Java设计模式(十二) 策略模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...
- Java设计模式(二) 工厂方法模式
本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...
- Java设计模式(一) 简单工厂模式不简单
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...
- Java设计模式(十一) 享元模式
原创文章,同步发自作者个人博客 http://www.jasongj.com/design_pattern/flyweight/.转载请注明出处 享元模式介绍 享元模式适用场景 面向对象技术可以很好的 ...
- 《JAVA与模式》之合成模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述 ...
- Java 设计模式系列(二三)访问者模式(Vistor)
Java 设计模式系列(二三)访问者模式(Vistor) 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以 ...
- Java 设计模式系列(十)外观模式
Java 设计模式系列(十)外观模式 门面模式(Facade):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这 ...
- Java 设计模式系列(九)组合模式
Java 设计模式系列(九)组合模式 将对象组合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象的使用具有一致性. 一.组合模式结构 Component: 抽象 ...
随机推荐
- ServletFileUpload 图片上传
<script type="text/javascript"> $(function () { $('#uploadSubmit').click(function () ...
- better-scroll 实现tab栏目滑动当前高亮始终在可视区
https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/#better-scroll better-scroll文档地址 如图 ,是我们要实现的 ...
- React+Redux实现追书神器网页版
引言 由于现在做的react-native项目没有使用到redux等框架,写了一段时间想深入学习react,有个想法想做个demo练手下,那时候其实还没想好要做哪一个类型的,也看了些动漫的,小说阅读, ...
- Android音视频通话过程中最小化成悬浮框的实现(类似Android8.0画中画效果)
关于音视频通话过程中最小化成悬浮框这个功能的实现,网络上类似的文章很多,但是好像还没看到解释的较为清晰的,这里因为项目需要实现了这样的一个功能,今天我把它记录下来,一方面为了以后用到便于自己查阅,一方 ...
- sql 触发器,看完后对CHK有更深的理解
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. 什么是触发器? 触发器对表进行插入.更新.删除 ...
- 自定义控件,上图下字的Button,图片任意指定大小
最近处在安卓培训期,把自己的所学写成博客和大家分享一下,今天学的是这个自定义控件,上图下字的Button安卓自带,但是苦于无法设置图片大小(可以在代码修改),今天自己做了一个,首先看一下效果图,比较实 ...
- c# winform 窗体之间的传参
说起winform程序中窗体之间的参数互传,大家找度娘会找到很多方法: 1.在窗体类中创建全局变量,类型为公开.静态的: 2.在窗体类中定义狗仔函数: 3.通过实践来船体参数: 这三种思路完全来自于霖 ...
- css为超过一定宽度的文本内容自动加上省略号
当在html中某个地方添加文本内容的时候如果内容过长我们会希望他超过一定宽度之后,其余的可以被截断,后面补充为省略号: 实现方式: 1.设置css样式为文本不换行: 2.位包裹文本的标签指定宽度: 3 ...
- HDU2186--水
悼念512汶川大地震遇难同胞--一定要记住我爱你 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- mysql复习秘籍
mysql复习 一:复习前的准备 1:确认你已安装wamp 2:确认你已安装ecshop,并且ecshop的数据库名为shop 二 基础知识: 1.数据库的连接 mysql -u -p -h -u 用 ...