【GOF23设计模式】组合模式
来源:http://www.bjsxt.com/
一、【GOF23设计模式】_组合模式、树状结构、杀毒软件架构、JUnite底层架构、常见开发场景
package com.test.composite;
/**
* 抽象组件
*/
public interface Component {
void operation();
} //叶子组件
interface Leaf extends Component{
}
//容器组件
interface Composite extends Component{
void add(Component c);
void remove(Component c);
Component getChild(int index);
}
package com.test.composite; import java.util.ArrayList;
import java.util.List; /**
* 抽象组件构建
*/
public interface AbstractFile {
void killVirus();//杀毒
} //叶子组件
class ImageFile implements AbstractFile {
private String name; public ImageFile(String name) {
super();
this.name = name;
} @Override
public void killVirus() {
System.out.println("---图像文件:" + name + ",进行查杀");
}
}
class TextFile implements AbstractFile {
private String name; public TextFile(String name) {
super();
this.name = name;
} @Override
public void killVirus() {
System.out.println("---文本文件:" + name + ",进行查杀");
}
}
class VideoFile implements AbstractFile {
private String name; public VideoFile(String name) {
super();
this.name = name;
} @Override
public void killVirus() {
System.out.println("---视频文件:" + name + ",进行查杀");
}
} //容器组件
class Folder implements AbstractFile {
private String name;
//定义容器:用来存放本容器构建下的子节点
private List<AbstractFile> list = new ArrayList<AbstractFile>(); public Folder(String name) {
super();
this.name = name;
} public void add(AbstractFile file){
list.add(file);
}
public void remove(AbstractFile file){
list.remove(file);
}
public AbstractFile getChild(int index){
return list.get(index);
} @Override
public void killVirus() {
System.out.println("---文件夹:" + name + "进行查杀"); for (AbstractFile file : list) {//递归
file.killVirus();
}
}
}
package com.test.composite;
public class Client {
public static void main(String[] args) {
AbstractFile f2,f3,f4,f5;
Folder f1 = new Folder("我的收藏");
f2 = new ImageFile("大头像.jpg");
f3 = new TextFile("Hello.txt");
f1.add(f2);//我的收藏下
f1.add(f3);
Folder f11 = new Folder("电影");
f4 = new VideoFile("笑傲江湖.avi");
f5 = new VideoFile("神雕侠侣.avi");
f11.add(f4);//电影下
f11.add(f5);
f1.add(f11);//我的收藏下
f1.killVirus();
}
}
控件台输出:
---文件夹:我的收藏进行查杀
---图像文件:大头像.jpg,进行查杀
---文本文件:Hello.txt,进行查杀
---文件夹:电影进行查杀
---视频文件:笑傲江湖.avi,进行查杀
---视频文件:神雕侠侣.avi,进行查杀
【GOF23设计模式】组合模式的更多相关文章
- 16. 星际争霸之php设计模式--组合模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- Java设计模式——组合模式
JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...
- 【设计模式】Java设计模式 - 组合模式
Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...
- 设计模式组合模式(Composite)精华
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助如何创建一个系统独立.这是一个这些对象和陈述的组合. 创建使用继承类的类架构更改实例.的对象类型模型的建 ...
- c#设计模式-组合模式
在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象和复合对象 ...
- [Head First设计模式]生活中学设计模式——组合模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- JAVA 设计模式 组合模式
用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构
- javascript设计模式-组合模式
组合模式所要解决的问题: 可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象.可以把简单这些对象定义成类,然后定义一些容器类来存储这些简单对象. 客户端代码必须区别对象简单对象和 ...
- 设计模式 -- 组合模式 (Composite Pattern)
定义: 对象组合成部分整体结构,单个对象和组合对象具有一致性. 看了下大概结构就是集团总公司和子公司那种层级结构. 角色介绍: Component :抽象根节点:其实相当去总公司,抽象子类共有的方法: ...
- javascript设计模式——组合模式
前面的话 在程序设计中,有一些和“事物是由相似的子事物构成”类似的思想.组合模式就是用小的子对象来构建更大的对象,而这些小的子对象本身也许是由更小的“孙对象”构成的.本文将详细介绍组合模式 宏命令 宏 ...
随机推荐
- Oracle数据库入门——pctfree和pctused详解
一.建立表时候,注意PCTFREE参数的作用 PCTFREE:为一个块保留的空间百分比,表示数据块在什么情况下可以被insert,默认是10,表示当数据块的可用空间低于10%后,就不可以被insert ...
- 使用grunt构建seajs项目
1.安装nodejs 2.安装grunt-cli npm install -g grunt-cli 3.进入到项目目录,同时准备好package.json和Gruntfile.js文件 //packa ...
- Java NIO原理分析
Java IO 在Client/Server模型中,Server往往需要同时处理大量来自Client的访问请求,因此Server端需采用支持高并发访问的架构.一种简单而又直接的解决方案是“one-th ...
- IL速查
名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...
- Centos用yum升级mysql到(5.5.37)
原文:http://www.if-not-true-then-false.com/2010/install-mysql-on-fedora-centos-red-hat-rhel/ 1. Change ...
- 利用SSIS发送邮件
璎Nicole珞 博客园 闪存 首页 新随笔 联系 管理 订阅 随笔- 15 文章- 0 评论- 0 SSIS 利用发送邮件服务 Send Email Task 1. 在SSIS中如何发送邮 ...
- java攻城狮之路(Android篇)--SQLite
一.Junit 1.怎么使用 在AndroidManifest.xml文件中进行配置, 在manifest借点下配置instrumentation, 在application借点下 ...
- 当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作
在Web程序中引用了WinForm的类库引起了 主要是为了在web程序中使用Message.Show()以及SaveFileDialog类,能web程序中引用了WinForm类库 在Visual St ...
- 关于js中的几个小问题。
问题1: 使用连续赋值后面的变量会成为全局对象的一个属性,并且这个属性可以通过delete删除. 原因:赋值语句是从右往左执行的,我们将10赋值给了c,但是c此时还声明,接着把c的返回值赋值给了b,但 ...
- Oracle 11g 安全加固
1.安全加固的检查方向 2.安全加固检查safeCheck.sh 3.安全加固执行safeExec.sh 1.安全加固的检查方向 1.1.sysdba用户远程登录限制(查看Oracle登录认证方式) ...