【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: 抽象 ...
随机推荐
- .net core2.0下使用Identity改用dapper存储数据
前言. 已经好多天没写博客了,鉴于空闲无聊之时又兴起想写写博客,也当是给自己做个笔记.过了这么些天,我的文笔还是依然那么烂就请多多谅解了.今天主要是分享一下在使用.net core2.0下的实际遇到的 ...
- ssh简单配置
Port 2223Protocol 2HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_dsa_keyKeyRegeneration ...
- jqGrid数据表格
方式一: <!DOCTYPE html><html><head><meta charset="utf-8" /><title& ...
- 【原创】python爬虫获取网站数据并存入本地数据库
#coding=utf-8 import urllib import re import MySQLdb dbnumber = MySQLdb.connect('localhost', 'root', ...
- JSP4(内置对象)
一.超级链接传值问题传值: <a href="href1.jsp?id=1&name=pkd&age=40">This is my JSP page. ...
- I/O复用中的 select poll 和 epoll
I/O复用中的 select poll 和 epoll: 这里有一些不错的资料: I/O多路复用技术之select模型: http://blog.csdn.net/nk_test/article/de ...
- 分布式监控系统Zabbix3.2监控数据库的连接数
在 分布式监控系统Zabbix3.2跳坑指南 和 分布式监控系统Zabbix3.2给异常添加邮件报警 已经介绍了如何安装以及报警.此篇通过介绍监控数据库的3306端口连接数来了解如何监控其它端口和配置 ...
- Centos下抓包
刚才遇到一个问题,微信配置时token总是失败. 于是抓一下服务器的包.看看是否是数据传输出了问题. 先安装工具 [Shell] 纯文本查看 复制代码 ? 1 yum install -y wires ...
- Music Tags 隐私政策
隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐 ...
- Netty之粘包分包
粘包现象 客户端在一个for循环内连续发送1000个hello给Netty服务器端, Socket socket = new Socket("127.0.0.1", 10101); ...