组合模式

设计模式-组合模式

本小妞迷上赌 提交于 2019-11-27 22:19:02
在使用组合模式中需要注意一点也是组合模式最关键的地方:叶子对象和组合对象实现相同的接口。这就是组合模式能够将叶子节点和对象节点进行一致处理的原因。 下面以File为例,文件夹里有文件和子文件夹,不管是文件还是文件夹,他们都继承了相同的接口FIle 类图 1.创建FIle抽象类 package com.design.demo.composite; /** * @author: GuanBin * @date: Created in 下午10:26 2019/8/18 */ public abstract class File { String name; public File(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract void display(); } 2.创建Folder继承File package com.design.demo.composite; import java.util.ArrayList; import java.util.List; /** * @author: GuanBin * @date: Created

GOF23设计模式-结构型(7种)

醉酒当歌 提交于 2019-11-27 10:51:28
文章目录 二、结构型模式 1. 外观模式(门面模式) 定义 适用场景 优点 缺点 源码 外观模式和中介者模式 外观模式和单例模式 外观模式和抽象工厂模式 2. 装饰者模式 定义 适用场景 优点 缺点 源码 装饰者模式和代理模式 装饰者和适配器模式 3. 适配器模式 定义 适用场景 优点 缺点 扩展 源码 适配器模式和外观模式 4. 享元模式 定义 适用场景 优点 缺点 内部状态和外部状态 源码 享元模式和代理模式 享元模式和单例模式 5. 组合模式 定义 适用场景 优点 缺点 源码 组合模式和访问者模式 6. 桥接模式 定义 适用场景 优点 缺点 源码 桥接和组合模式 桥接模式和适配器模式 7. 代理模式 定义 适用场景 优点 缺点 静态代理和动态代理 源码 源码链接:https://github.com/ouyangxizhu/design_pattern.git 二、结构型模式 1. 外观模式(门面模式) com.ouyangxizhu.design.pattern.structural.facade 定义 提供了一个结构来访问子系统中的一群接口。 这个外观结构 封装 了子系统之间的调用逻辑,调用顺序。比如购物,用户只关注我能不能买成功(下单功能),至于怎么减库存,怎么生成订单,怎么物流配送都不需要知道。 适用场景 当子系统越来越复杂,增加外观模式提供简单接口调用。

组合模式---结构型

南笙酒味 提交于 2019-11-27 07:28:33
1 基础知识 定义: 将对象组合成树形结构以表示“部分-整体”的层次结构。 特征: 组合模式使得客户端对单个对象和组合对象保持一致的方式处理。 使用场景: 希望客户端可以忽略组合对象与单个对象的差异;处理一个树形结构时。 优点: 清楚定义分层次的复杂对象,表示对象的全部或部分层次;让客户端忽略了层次的差异,方便对整个层次结构控制;简化了客户端代码;符合开闭原则。 缺点: 限制类型时会比较复杂;使设计变得更加抽象。 0 来源: https://www.cnblogs.com/youngao/p/11351151.html

Unity3D中的组合模式

落花浮王杯 提交于 2019-11-27 07:19:28
1、建立节点抽象基类。 using System.Collections.Generic; public abstract class DMComponent { public List<DMComponent> componentSonList; protected string mName; public string Name { get { return mName; } } public DMComponent(string name) { mName = name; } public abstract void AddComponent(DMComponent component); public abstract void RemoveComponent(DMComponent component); public abstract DMComponent GetComponent(int index); } 2、建立叶子节点类。 public class DMLeaf : DMComponent { public DMLeaf(string name) : base(name) { } public override void AddComponent(DMComponent component) { return; } public override

常用的设计模式

末鹿安然 提交于 2019-11-27 01:27:29
常用的设计模式有哪些?很多时候一时想不起来。因此编个顺口溜方便记忆。 组织(组合模式)经过观察(观察者模式),命令(命令者模式)我,找个代理(代理模式),建个工厂(工厂模式),生产单例产品(单例模式),然后迭代(迭代模式)检查所有的产品,不合格的产品要适配(适配器模式)一下。 转载于:https://www.cnblogs.com/nzbbody/archive/2012/08/24/2654145.html 来源: https://blog.csdn.net/weixin_30588907/article/details/99234397

javascript设计模式 - 组合模式

守給你的承諾、 提交于 2019-11-26 23:11:28
1:构造函数 + 原型模式 function CreateFn(name,age) { this .name = name ; this .age = age ; this .arr = [ 1 , 2 , 3 ] } CreateFn .prototype .run = function(){ return "这是原型上的一个 共享方法" ; } var fn1 = new CreateFn( "lume" , 18 ) ; var fn2 = new CreateFn( "lume" , 18 ) ; fn2 .arr .push ( "添加一个" ) console .log (fn1 .arr ) ; console .log (fn2 .arr ) ; console .log (fn1 .name ) ; console .log (fn2 .name ) ; console .log (fn1 .run ()) ; console .log (fn2 .run ()) ; console .log (fn1 .run === fn2 .run ) ; 把需要共享的 添加到 该函数的 原型(prototype)上: 这就实现了 , 该共享的共享 ,该私有的 私有 ! 来源: CSDN 作者: lume博客 链接: https://blog.csdn.net

javascript组合模式

百般思念 提交于 2019-11-26 23:10:41
javascript 组合模式 需求:一个学校有两个班级,每个班级有两个组,小组分着上课,一起考试 不使用组合模式: /* * 需求 , * 一个学校有两个班级,每个班级有两个组,小组分着上课,一起考试 * *不使用组合模式 * */ var school = function ( name ) { this . name = name ; var classList = [ ] ; this . add = function ( cls ) { classList . push ( cls ) ; return this ; } ; this . getList = function ( ) { return classList ; } } var classList = function ( name ) { this . name = name ; var groupList = [ ] ; this . add = function ( group ) { groupList . push ( group ) ; return this ; } ; this . getList = function ( ) { return groupList ; } } var groupList = function ( name ) { this . name = name ;

js设计模式 --- 组合设计模式

為{幸葍}努か 提交于 2019-11-26 23:10:07
组合设计模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。它可以帮助开发者对多个具有相似功能对象进行分类, 提高规范化设计 有许多关于分级数据结构的例子,使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的:文件系统。文件系统由目录和文件组成。每个目录都可以装内容。目录的内容可以是文件,也可以是目录。按照这种方式,计算机的文件系统就是以递归结构来组织的。如果你想要描述这样的数据结构,那么你可以使用组合模式Composite。 涉及角色 特点 在组合模式的层次体系中有两种类型的对象: 叶对象和组合对象, 这是一种递归定义, 但者也是其有用的原因所在, 一个组合对象可以由其他组合对象和叶子对象组成, 但叶子对象不再包含子对象, 组合对象用于叶子节点的分类 设计 这里借用 javascript设计模式 的图来说明组合模式的设计 Interface 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。 Field 在组合中表示叶子结点对象,叶子结点没有子结点,

JavaScript设计模式-----组合模式

廉价感情. 提交于 2019-11-26 23:08:34
1.组合模式的定义: 组合模式就是用小的子对象来构建更大的对象,而这些小的对象本身也许是由更小的”孙对象“构成 2.组合模式的用途: 组合模式将对象组合成树形结构,以表示”部分-整体“的层次结构。除了用来表示树形结构之外,组合模式的另一个好处是通过对象的多态性表示,使得用户对单个对象和组合对象的使用具有一致性。 3.更强大的宏命令: 这个例子中,基本对象可以被组合成更复杂的组合对象,组合对象又可以被组合,这样不断递归下去,只需调用最上层对象的方法,就能对整个树进行深度优先的搜索。 4.透明性带来的安全问题: 组合模式的透明性使得发起请求的客户不用去顾忌树中组合对象和叶对象的区别,但他们在本质上有区别。 组合对象可以拥有子节点,所以我们也许会发生一些误操作,比如往叶对象中添加子节点,解决方案通常是给叶对象也增加add方法,并在调用这个方法时,抛出一个异常来及时提醒用户。 5.引用父对象: 有时候我们需要在子节点上保持对父节点的引用,比如在组合模式中使用职责链时,有可能需要让请求从子节点往父节点上冒泡传递。 例如:扫描文件夹,移除某一个具体的文件 6.何时使用组合模式: 1.表示对象的部分-整体层次结构。组合模式可以方便的构造一棵树来表示对象的部分-整体结构。特别是我们在开发期间不确定这棵树到底存在多少层次的时候。在树的构造最终完成后,只需要通过请求树的最顶层对象

设计模式-组合模式

寵の児 提交于 2019-11-26 23:08:15
1.描述:组合模式就是一种用小的子对象来构建大对象的一种编程思想。 2.用途: 表示树形结构 – 具体功能分布在各子对象中 利用对象多态性统一对待组合对象和单个对象 3.实例 - - - - - -扫描文件夹 //文件夹对象 var Folder = function (name) { this .name = name; this .files = []; }; Folder.prototype.add = function (file) { this .files.push(file); }; Folder.prototype.scan = function () { console.log( '开始扫描文件:' + this .name); for ( var i= 0 ,file,files = this .files;file=files[i++];){ file.scan(); } }; //文件对象 var File = function (name) { this .name = name; }; File.prototype.add = function (file) { throw new Error ( '文件下面不能再添加文件' ); }; File.prototype.scan = function () { console.log( '开始扫描文件:'