【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: 抽象 ...
随机推荐
- 这应该是目前最快速有效的ASP.NET Core学习方式(视频)
ASP.NET Core都2.0了,它的普及还是不太好.作为一个.NET的老司机,我觉得.NET Core给我带来了很多的乐趣.Linux, Docker, CloudNative,MicroServ ...
- Android 之旅开始了!先自我了解下Android与Linux之间的关系
Android是在Linux2.6的内核基础之上运行的,提供核心系统服务:安全.内存管理.进程管理.网络组.驱动模型.内核部分还相当于一个介于硬件层和系统中其他软件组之间的一个抽象层次.但是严格来说它 ...
- 使用Recovery Services备份文件及文件夹
1.创建恢复服务保管库 2.在backup项中选择本地,备份文件和文件夹选项 3.根据提示下载Agent及保管库凭据 4.在文件服务器上安装Agent 5.选择"继续注册"项,并添 ...
- python win32 简单操作
源由 刚开始是帮朋友做一个按键精灵操作旺信的脚本,写完后各种不稳定:后来看到python可以操作win32相关的api,恰好这一段时间正在学习python,感觉练手的时候到了~~~ 下载 要注意Pyt ...
- Java数据结构和算法(一)——简介
本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...
- js脚本根据身份证号获取性别、年龄、家庭地址、生日
做项目测试时需要根据身份证号获取其信息,也不想调接口,就自己在本地通过收集资料整合了一个
- 51Nod--1049最大子段和
1049 最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a ...
- 计算rem
(function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ' ...
- ps的快捷键
最近学习了一些ps切图,总结一些快捷键,以免自己忘记,总结的不好,也可能不全,忘大牛指点,试着坚持总结 1.工具箱 (多种工具共用一个快捷键的可同时按[Shift]加此快捷键选取) 矩形.椭圆选框工具 ...
- Express4.x API (四):Router (译)
Express4.x API 译文 系列文章 Express4.x API (一):application (译) -- 进行 Express4.x API (二):request (译) -- 完成 ...