设计模式之GOF23组合模式
组合模式Composite
使用组合模式的场景:把部分和整体的关系用树形结构表示,从而使客户端可以使用统一的方式处理对象和整体对象(文件和文件夹)
组合模式核心:
-抽象构件(Component)角色:定义了叶子和容器的共同点
-叶子(Leaf)构件角色:无子节点
-容器(Composite)构件角色:有容器特征:可以包含子节点或者其他容器
例如杀毒软件:
public abstract class  File {
     protected String name;
  abstract void killVirus();//杀毒
  public File(String name) {
   this.name = name;
  }
  
}
class ImageFile extends  File{
 public ImageFile(String name) {
  super(name);
 }
 public void killVirus() {
  System.out.println("对图片"+this.name+".jpg进行杀毒");
 }
}
class TextFile extends  File{
 public TextFile(String name) {
  super(name);
 }
 public void killVirus() {
  System.out.println("对文本"+this.name+".txt进行杀毒");
 }
}
class Folder extends File{
 List<File> files;
 public Folder(String name) {
  super(name);
  files=new ArrayList<File>();
 }
 public void add(File f) {
  files.add(f);
 }
 public void remove(int index) {
  files.remove(index);
 }
 public File getChild(int index) {
  return files.get(index);
 }
 void killVirus() {
  System.out.println("对"+this.name+"进行查杀");
  for(File f:files) {//天然的递归
   f.killVirus();
  }
 }
}
public class Client {
  public static void main(String[] args) {
   File f2,f3,f4;
   Folder f1=new Folder("我的收藏");
   Folder f5=new Folder("我的小说");
   f2=new ImageFile("小张");
   f3=new TextFile("武林外传");
   f4=new TextFile("家有儿女");
   f5.add(f3);
   f5.add(f4);
   f1.add(f2);
   f1.add(f5);
   f1.killVirus();
  }
}
设计模式之GOF23组合模式的更多相关文章
- java23种设计模式——八、组合模式
		
目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式--四.原型模式 java23种设计模式-- ...
 - [设计模式] javascript 之 组合模式
		
组合模式说明 组合模式用于简单化,一致化对单组件和复合组件的使用:其实它就是一棵树: 这棵树有且只有一个根,访问入口,如果它不是一棵空树,那么由一个或几个树枝节点以及子叶节点组成,每个树枝节点还包含自 ...
 - 设计模式学习之组合模式(Composite,结构型模式)(10)
		
转载地址:http://www.cnblogs.com/zhili/p/CompositePattern.html 一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系 ...
 - 设计模式之:组合模式(Composite)
		
支持原创:http://blog.csdn.net/hguisu/article/details/7530783 设计模式(七)组合模式Composite(结构型) 1. 概述 在数据结构里面,树结构 ...
 - [js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表
		
所谓组合模式,就是把一堆结构分解出来,组成在一起,现实中很多这样的例子,如: 1.肯德基套餐就是一种组合模式, 比如鸡腿堡套餐,一般是是由一个鸡腿堡,一包薯条,一杯可乐等组成的 2.组装的台式机同理, ...
 - C#设计模式之十组合模式(Composite)【结构型】
		
一.引言 今天我们要讲[结构型]设计模式的第四个模式,该模式是[组合模式],英文名称是:Composite Pattern.当我们谈到这个模式的时候,有一个物件和这个模式很像,也符合这个模式要表达 ...
 - 设计模式学习心得<组合模式 Composite>
		
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式, ...
 - C#设计模式之九组合模式(Composite Pattern)【结构型】
		
一.引言 今天我们要讲[结构型]设计模式的第四个模式,该模式是[组合模式],英文名称是:Composite Pattern.当我们谈到这个模式的时候,有一个物件和这个模式很像,也符合这个模式要表达的意 ...
 - Java设计模式学习记录-组合模式
		
前言 今天要介绍的设计模式是组合模式,组合模式也是结构型设计模式的一种,它主要体现了整体与部分的关系,其典型的应用就是树形结构.组合是一组对象,其中的对象可能包含一个其他对象,也可能包含一组其他对象. ...
 
随机推荐
- shift后门
			
shift快捷 Windows的粘滞键------C:\windows\system32\sethc.exe,它本是为不方便按组合键的人设计的 Windows系统按5下shift后,Windows就执 ...
 - [YII2] 去除自带js,加载自己的JS,然后ajax(json)传值接值!
			
本想用YII2自带的JS,可是用着效果不好,想从新加载,找了好多终于实现啦!还有ajax(json)传值接值! 首先直接了当的就把YII2自带的js去掉! 把下面代码加入到/config/main.p ...
 - Java IO 流-- 文件拷贝
			
IO流操作套路: 1.创建源: 2.选择流: 3.操作: 4.释放资源 上代码: package com.xzlf.io; import java.io.File; import java.io.Fi ...
 - BUAA_OO 第一单元总结
			
1.简单多项式求导 第一次作业的难点,我认为是对输入的预处理,尤其是正则表达式的使用.这次作业的思路是:首先将表达式进行预处理,(由于题目中要求不会有空格产生的WF,所以可以放心大胆的消除空格). 消 ...
 - CSS中“~”(波浪号)、“,”(逗号)、“+”(加号)、“>”(大于号)、“ ”(空格)详解
			
“~”:$('pre ~ brother')表示获取pre节点的后面的所有兄弟节点,相当于nextAll()方法: “+”:$('pre + nextbrother')表示获得pre节点的下一个兄弟节 ...
 - 从零开始学习docker之在docker中搭建redis(单机)
			
docker搭建redis 一.环境准备 云环境:CentOS 7.6 64位 二.下载镜像 从docker hub中找到redis镜像 传送门------https://hub.docker.com ...
 - swoole学习--登录模块
			
使用swoole+thinkphp6.0+redis 结合开发的登录模块,做完之后有几点感悟: 1.不要相信任务数据,包括请求的外部接口,特别是超时者部分,尽可能的交给task完成. 2.原来可以在入 ...
 - linux的p0f检测,分析抓包信息
			
p0f是一个纯粹的被动指纹识别工具,它在不干涉双方通信的情况下,通过嗅探的方式来分析流经某一网卡的流量以达到指纹识别的目的 P0f是继Nmap和Xprobe2之后又一款远程操作系统被动判别工具.它支持 ...
 - python学习03字符串基本操作
			
'''字符串可以用单引号,双引号,三引号表示 '''#1.读取str1='I am a student!'#每一个字符对应一个下标,可以利用下标的方式来读取字符串对应的值——索引print(str1[ ...
 - Python获取当前 年 月 日
			
import datetime datetime.datetime.now().year datetime.datetime.now().month datetime.datetime.now().d ...