23设计模式之组合模式(Composite)
2015-09-21 13:13
465 查看
返回首页
2. 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
Component:为组合中的对象声明接口。在适当的情况下,实现所有类共有接口的缺省行为。声明一个接口用于访问和管理Component的子组件。(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。
2.
Leaf:在组合中表示叶节点对象,叶节点没有子节点。在组合中定义节点对象的行为。
3.
Composite:定义有子部件的那些部件的行为。存储子部件。在Component接口中实现与子部件有关的操作。
4.
Client:通过Component接口操纵组合部件的对象。
b) ProjectAssistant.swift
程序员一
一、概述
Composite属于结构型模式中的一种,将对象组合成树形结构以表示"部分-整体"的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。二、适用性
1. 你想表示对象的部分-整体层次结构。2. 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
三、参与者
1.Component:为组合中的对象声明接口。在适当的情况下,实现所有类共有接口的缺省行为。声明一个接口用于访问和管理Component的子组件。(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。
2.
Leaf:在组合中表示叶节点对象,叶节点没有子节点。在组合中定义节点对象的行为。
3.
Composite:定义有子部件的那些部件的行为。存储子部件。在Component接口中实现与子部件有关的操作。
4.
Client:通过Component接口操纵组合部件的对象。
四、类图
五、代码实现
1. Component:为组合中的对象声明接口。
Employer.swift// // Employer.swift // 23设计模式 // // Created by 阳君 on 14/12/3. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// Employer为组合中的对象声明接口 class Employer { /// 员工姓名 var name:String = "" /// 下属员工列表 var employers:Array<Employer> = Array() init() { } // MARK: 打印 func printInfo() { print(name); } // MARK: 增加 func add(employer:Employer){ } // MARK: 删除 func delete(employer:Employer){ } // MARK: 比较是否相等 func equal(employer:Employer) ->Bool { if employer.name == self.name { return true } return false } }
2. Leaf:在组合中表示叶节点对象,叶节点没有子节点。在组合中定义节点对象的行为。
a) Programmer.swift// // Programmer.swift // 23设计模式 // // Created by 阳君 on 14/12/3. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// Programmer在组合中表示叶节点对象,叶节点没有子节点 class Programmer: Employer { init(name:String){ super.init() super.name = name } }
b) ProjectAssistant.swift
// // ProjectAssistant.swift // 23设计模式 // // Created by 阳君 on 14/12/3. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// ProjectAssistant在组合中表示叶节点对象,叶节点没有子节点 class ProjectAssistant: Employer { init(name:String){ super.init() super.name = name } }
3. Composite:定义有子部件的那些部件的行为。
ProjectManager.swift// // ProjectManager.swift // 23设计模式 // // Created by 阳君 on 14/12/3. // Copyright (c) 2014年 六月. All rights reserved. // import Foundation /// ProjectManager定义有子部件的那些部件的行为 class ProjectManager: Employer { init(name:String){ super.init() super.name = name super.employers = [] } override func add(employer: Employer) { super.employers.append(employer) } override func delete(employer: Employer) { for(var i = 0; i < super.employers.count; i++) { if employer.equal(super.employers[i]) { super.employers.removeAtIndex(i) return } } } }
六、测试
1. 代码
// 组合模式 let pm = ProjectManager(name: "项目经理") let pa = ProjectAssistant(name: "项目经理") let pm1 = Programmer(name: "程序员一") let pm2 = Programmer(name: "程序员二") // Client:通过Component接口操纵组合部件的对象。 pm.add(pa) pm.add(pm1) pm.add(pm2) // 删除 pm.delete(pm2) for item in pm.employers { item.printInfo() }
2. 运行结果
项目经理程序员一
相关文章推荐
- OCP-V13-702
- 徒手用Java来写个Web服务器和框架吧<第三章:Service的实现和注册>
- 升级到win10后远程桌面无法被接入
- 【C/C++学院】0814-引用高级、引用高级增加/auto自动变量自动根据类型创建数据/Bool/Enum/newdelete全局/大数据乘法与结构体/函数模板与auto/宽字符本地化/inline
- linux syscon and regmap study note
- 潘鹏整理WPF(5)滚动条ScrollViewer
- thinkphp中SQLSTATE[42S02]: Base table or view not found: 1146 Table错误解决方法
- rsync服务器搭建
- hihoCoder 1228 Mission Impossible 6 2015北京网络赛 大模拟
- Cocos2d-x3.0 DrawNode吸取
- 深入学习 Block
- SOAP 介绍
- 0916 编程实验一 词法分析程序
- POJ 2112 Optimal Milking
- 构建完整的机器人应用系统
- WMI技术介绍和应用——查询硬件信息
- 阿里云服务器或者其他网站绑定域名方法
- 互联网年鉴
- tableview设置header
- android权限大全