设计模式 | 组合模式(composite)
定义:
结构:(书中图,侵删)

实例:
package designpattern.composite; public abstract class Target {
private String name;// 名称 public abstract void add(Target target);// 增加节点 public abstract void remove(Target target);// 删除节点 public abstract void move();// 移动 public abstract void attack();// 攻击 public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }
package designpattern.composite; public class Player extends Target {
private String name; public Player(String name) {
super();
this.name = name;
} @Override
public void move() {
System.out.println("[" + name + "]正在移动");
} @Override
public void attack() {
System.out.println("[" + name + "]发动攻击");
} @Override
public void add(Target target) {
} @Override
public void remove(Target target) {
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Player [name=" + name + "]";
} }
package designpattern.composite; import java.util.ArrayList;
import java.util.List; public class Team extends Target {
List<Target> team = new ArrayList<>(); @Override
public void add(Target target) {
team.add(target);
System.out.println(target.getName() + "加入队伍");
} @Override
public void remove(Target target) {
team.remove(target);
System.out.println(target.getName() + "离开队伍");
} @Override
public void move() {
System.out.println(teamMembers() + "组成的队伍正在移动");
} @Override
public void attack() {
System.out.println(teamMembers() + "组成的队伍发动攻击");
} private String teamMembers() {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("[");
for (Target target : team) {
stringBuffer.append(target.getName() + " ");
}
stringBuffer.append("]");
return stringBuffer.toString();
}
}
package designpattern.composite; public class Client {
public static void main(String[] args) {
Player captainAmerica = new Player("美国队长");
captainAmerica.move();
captainAmerica.attack(); System.out.println("----------复联成立----------");
Player ironMan = new Player("钢铁侠");
Player hulk = new Player("绿巨人");
Team team = new Team();
team.add(captainAmerica);
team.add(ironMan);
team.add(hulk); team.move();
team.attack(); System.out.println("----------发生矛盾--------");
team.remove(ironMan); team.move();
team.attack();
}
}
[美国队长]正在移动
[美国队长]发动攻击
----------复联成立----------
美国队长加入队伍
钢铁侠加入队伍
绿巨人加入队伍
[美国队长 钢铁侠 绿巨人 ]组成的队伍正在移动
[美国队长 钢铁侠 绿巨人 ]组成的队伍发动攻击
----------发生矛盾--------
钢铁侠离开队伍
[美国队长 绿巨人 ]组成的队伍正在移动
[美国队长 绿巨人 ]组成的队伍发动攻击
总结:
设计模式 | 组合模式(composite)的更多相关文章
- 浅谈设计模式--组合模式(Composite Pattern)
组合模式(Composite Pattern) 组合模式,有时候又叫部分-整体结构(part-whole hierarchy),使得用户对单个对象和对一组对象的使用具有一致性.简单来说,就是可以像使用 ...
- 设计模式 - 组合模式(composite pattern) 迭代器(iterator) 具体解释
组合模式(composite pattern) 迭代器(iterator) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考组合模式(composit ...
- 设计模式组合模式(Composite)精华
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助如何创建一个系统独立.这是一个这些对象和陈述的组合. 创建使用继承类的类架构更改实例.的对象类型模型的建 ...
- 设计模式 -- 组合模式 (Composite Pattern)
定义: 对象组合成部分整体结构,单个对象和组合对象具有一致性. 看了下大概结构就是集团总公司和子公司那种层级结构. 角色介绍: Component :抽象根节点:其实相当去总公司,抽象子类共有的方法: ...
- 设计模式--组合模式Composite(结构型)
一.概念 组合模式允许你将对象组合成树形结构来表现"整体/部分"层次结构.组合能让客户以一致的方式处理个别对象以及对象组合. 二.UML图 1.Component(对象接口),定义 ...
- C#设计模式——组合模式(Composite Pattern)
一.概述 在软件开发中,我们往往会遇上类似树形结构的对象体系.即某一对象既可能在树形结构中作为叶节点存在,也可能作为分支节点存在.比如在文件系统中,文件是作为叶节点存在,而文件夹就是分支节点.在设计这 ...
- 设计模式-组合模式(Composite)
一.概念 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 二.模式动机 组合模式,通过设计一个抽像的组件类,使它既代表叶子对象,又代表组合对 ...
- 说说设计模式~组合模式(Composite)
返回目录 何时能用到它? 组合模式又叫部分-整体模式,在树型结构中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦.对于今天这个 ...
- 大话设计模式--组合模式 Composite -- C++实现实例
1. 组合模式: 将对象组合成树形结构以表示"部分--整体"的层次结构,组合模式使用户对单个对象和组合对象的使用具有一致性. 需求中是体现部分与整体层次的结构时,希望用户可以忽略组 ...
- 设计模式(七)组合模式Composite(结构型)
设计模式(七)组合模式Composite(结构型) 1. 概述 在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面. 例子1:就是多级树形菜单. 例子2:文件和文件夹目录 2.问题 ...
随机推荐
- 【bzoj2152】聪聪可可 点分治
[bzoj2152]聪聪可可 2014年9月7日3,5472 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是 ...
- BFS简单迷宫
常见迷宫: 输入迷宫 启点 终点 然后求最短路径 BFS例题 用dist[][]数组来记录 启点到每个点的最短路径 #include <iostream> #include <fst ...
- [转]如何阅读android framework源码
但如果想深入的了解Android系统, 那么可以看下我的一些简单的总结. 知识 Java Java是AOSP的主要语言之一. 没得说, 必需熟练掌握. 熟练的Android App开发 Linux A ...
- 【ZJOI2017 Round1练习&BZOJ4774】D3T2 road(斯坦纳树,状压DP)
题意: 对于边带权的无向图 G = (V, E),请选择一些边, 使得1<=i<=d,i号节点和 n − i + 1 号节点可以通过选中的边连通, 最小化选中的所有边的权值和. d< ...
- Map根据value排序ASC DESC
原文:http://blog.csdn.net/k21325/article/details/53259180 需求有点刁钻,写关键词组合匹配标题的时候,遇到关键词像这样 XXX XXX 1222 X ...
- 我的arcgis培训照片3
来自:http://www.cioiot.com/successview-557-1.html
- Django学习系列之Form验证
django表单基础 django表单分类 基于django.forms.Form:所有表单类的父类 基于django.forms.ModelForm:可以和模型类绑定的Form Form验证流程 定 ...
- JButton点击事件
JButton点击事件: 以前都是搞一个JFrame,放个JButton,然后用鼠标点击: 忽然之间: import javax.swing.JButton; public class Page06 ...
- 详解cisco访问控制列表ACL
一:访问控制列表概述 ·访问控制列表(ACL)是应用在路由器接口的指令列表.这些指令列表用来告诉路由器哪些数据包可以通过,哪些数据包需要拒绝. ·工作原理:它读取第三及第四层包头中的信息,如源 ...
- MyEclipse 8.5安装Aptana
Aptana简单介绍 Aptana是一个很强大,开源,专注于JavaScript的Ajax开发IDE它的特性包含: 1.JavaScript,JavaScript函数,HTML,CSS语言的Co ...