[设计模式-结构型]组合(Composite )
发布日期:2021-07-01 05:47:47
浏览次数:2
分类:技术文章
本文共 2992 字,大约阅读时间需要 9 分钟。
概括
名称 | Composite |
结构 | |
动机 | 将对象组合成树形结构以表示?部分-整体?的层次结构。C o m p o s i t e 使得用户对单个对象和组合对象的使用具有一致性。 |
适用性 |
|
解析
形象比喻:
COMPOSITE—Mary今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。”“……”,MM都会用Composite模式了,你会了没有?
合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。1.Component
为组合中的对象声明接口。 在适当的情况下,实现所有类共有接口的缺省行为。 声明一个接口用于访问和管理Component的子组件。 (可选)在递归结构中定义一个接口,用于访问一个父部件,并在合*的情况下实现它。 2.Leaf 在组合中表示叶节点对象,叶节点没有子节点。 在组合中定义节点对象的行为。 3.Composite 定义有子部件的*些部件的行为。 存储子部件。 在Component接口中实现与子部件有*的操作。 4.Client 通过Component接口操纵组合部件的对象。实例
举例来说,一件产品可能是由多个产品(部件)组成起来的。
这个例子目的是一个软件产品可以由多个软件产品或部件组合而成。
涉及的文件有:
Product.java -- 抽象父类
-- SoftwareProduct.java
-- ProductPart.java
TestMain.java
/** * @author oscar999 * @date 2013-7-25 * @version V1.0 */package designptn.composite;import java.util.List;public abstract class Product { private String name; /** * @return the name */ public String getName() { return name; } /** * @param name * the name to set */ public void setName(String name) { this.name = name; } public abstract void add(Product product); public abstract void delete(Product product); public Listproducts; public void printInfo() { System.out.println(name); } public List getProducts() { return this.products; }}
/** * @author oscar999 * @date 2013-7-25* @version V1.0 */package designptn.composite;import java.util.ArrayList;public class SoftwareProduct extends Product { public SoftwareProduct(String name) { setName(name); this.products = new ArrayList(); } @Override public void add(Product product) { // TODO Auto-generated method stub this.products.add(product); } @Override public void delete(Product product) { // TODO Auto-generated method stub this.products.remove(product); }}
/** * @author oscar999 * @date 2013-7-25 * @version V1.0 */package designptn.composite;public class ProductPart extends Product { public ProductPart(String name) { setName(name); this.products = null; } @Override public void add(Product product) { // TODO Auto-generated method stub } @Override public void delete(Product product) { // TODO Auto-generated method stub }}
/** * @author oscar999 * @date 2013-7-25 * @version V1.0 */package designptn.composite;import java.util.List;public class TestMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Product product = new SoftwareProduct("Software Product"); Product subProduct = new SoftwareProduct("Sub Software Product"); Product part1 = new ProductPart("Part 1"); Product part2 = new ProductPart("Part 2"); product.add(subProduct); product.add(part1); product.add(part2); Listproducts = product.getProducts(); for(Product productTemp : products) { System.out.println(productTemp.getName()); } }}
转载地址:https://oscar.blog.csdn.net/article/details/9376031 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月23日 01时35分27秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
commons-dbutils【不推荐】
2019-05-02
SOCAT端口转发
2019-05-02
docker快速搭建HTTP代理
2019-05-02
ActiveReports 报表应用教程 (14)---数据可视化
2019-05-03
Spring Cloud构建微服务架构:分布式服务跟踪(入门)【Dalston版】
2019-05-03
TestNG 学习总结 - 忽略测试(八)
2019-05-03
TestNG 学习总结 - 测试结果报告(十四)
2019-05-03
Java对象深复制、浅复制
2019-05-03
细分自动化测试
2019-05-03
使用WebDriver完成web页面切换操作(附源码)
2019-05-03
山东科技大学2015-2016学年第一学期程序设计基础期末考试第一场 题解
2019-05-03
蓝桥杯题解(三)
2019-05-03
Scala学习第十二天 Scala中的继承:超类的构造、重写字段、重写方法代码实战
2019-05-03
剑指offer:字符串的组合(java)
2019-05-03
实时开发框架Meteor API解读系列<二>Core
2019-05-03
实时开发框架Meteor 实际应用系列<一>---文件的上传和下载[补充]
2019-05-03
启用fcitx-qimpanel面板程序
2019-05-03
浅谈Q的基本实现
2019-05-03
阿里云短信服务(JAVA)
2019-05-03