自己开网站做职称论文可以吗,上海高端网站建设服务公,产品推广方式有哪些,优质做网站费用常用设计模式系列#xff08;十三#xff09;—组合模式
第一节
前言
hello大家好#xff0c;今年已经过去了一半#xff0c;年初立下的flag#xff0c;不知道实现了没有#xff0c;你的flag改了多少次#xff1f;无论自己的愿望是否完成#xff0c;我们都应该怀揣着追…常用设计模式系列十三—组合模式
第一节
前言
hello大家好今年已经过去了一半年初立下的flag不知道实现了没有你的flag改了多少次无论自己的愿望是否完成我们都应该怀揣着追逐梦想之心去尝试突破上一年的自我。我去年的flag虽然也没有实现但是自己努力去做了结果其实并不重要更不要成为自己内心阻挠自己努力的绊脚石加油年轻人
今天学习对象结构型设计模式的最后一章组合模式组合模式可以理解为整体部分一个整体有多个部分组成例如一个树由多个主干组成每个主干又有多个树杈每个树杈又有多个树叶。
第二节
组合模式组合Composite
Pattern模式的定义有时又叫作整体-部分Part-Whole模式它是一种将对象组合成树状的层次结构的模式用来表示“整体-部分”的关系使用户对单个对象和组合对象具有一致的访问性属于结构型设计模式。组合模式一般是用来描述整体与部分的关系我们可以把它应用到数据结构的树形结构当中顶层的节点就是根节点根节点下面可以包含多个树枝节点和多个叶子节点树枝节点下面又可以包含树枝节点和叶子节点类似于我们学习数据结构中的树形结构。在组合模式中整个树形结构中的对象都属于同一种类型带来的好处就是用户不需要辨别是树枝节点还是叶子节点可以直接进行操作给用户的使用带来极大的便利。前两天圣诞节小张同学为了庆祝过节跑到了大超市买了很多的菜与肉类从超市出来小张同学买了许多的物品跟超市的售货员要了很大的带子这个大袋子里装了用中型号袋子装的各种蔬菜、塑料包装的肉卷小袋子装的散装丸子和小袋子装的火锅底料中型的带子里又装了许多小袋子每个小袋子都是一种蔬菜而小袋子装的盒子里面有三个更小的盒子每个盒子分别是鸡肉卷、羊肉卷、肥牛卷。这种大袋子套中袋子和物品中袋子又套小袋子和物品的场景无论是大袋子还是小袋子还是蔬菜都属于物品这种嵌套组合就是组合模式。第三节
代码实现
1.编写抽象构件
package com.yang.composite;/*** ClassName Articles* Description 抽象构件-物品* Author IT小白架构师之路* Date 2020/12/29* Version 1.0**/
public interface Articles {//计算价格public float calculation();//展示内容方法public void show();
}2.编写树枝角色
package com.yang.composite;import java.util.ArrayList;
import java.util.List;/*** ClassName Bags* Description 树枝构件袋子* Author IT小白架构师之路* Date 2020/12/29* Version 1.0**/
public class Bags implements Articles {private String name; //名字private ListArticles bags new ArrayListArticles();public Bags(String name) {this.name name;}public void add(Articles c) {bags.add(c);}public void remove(Articles c) {bags.remove(c);}public Articles getChild(int i) {return bags.get(i);}public float calculation() {float s 0;for (Object obj : bags) {s ((Articles) obj).calculation();}return s;}public void show() {for (Object obj : bags) {((Articles) obj).show();}}
}3.编写树叶角色
package com.yang.composite;/*** ClassName Goods* Description 树叶构件商品* Author IT小白架构师之路* Date 2020/12/29 16:53* Version 1.0**/
public class Goods implements Articles {private String name; //名字private int quantity; //数量private float unitPrice; //单价//构造方法public Goods(String name, int quantity, float unitPrice) {this.name name;this.quantity quantity;this.unitPrice unitPrice;}public float calculation() {return quantity * unitPrice;}public void show() {System.out.println(name (数量 quantity 单价 unitPrice 元));}
}4.编写测试类
package com.yang.composite;/*** ClassName Client* Description 客户端测试* Author IT小白架构师之路* Date 2020/12/29* Version 1.0**/
public class Client {public static void main(String[] args) {float s 0;Bags BigBag, mediumBag, smallRedBag, smallWhiteBag;Goods sp;BigBag new Bags(大袋子);mediumBag new Bags(中袋子);smallRedBag new Bags(红色小袋子);smallWhiteBag new Bags(白色小袋子);sp new Goods(菠菜, 2, 7.9f);smallRedBag.add(sp);sp new Goods(火锅底料, 1, 9.9f);smallRedBag.add(sp);sp new Goods(羊肉, 2, 38);smallWhiteBag.add(sp);sp new Goods(红酒, 3, 180);smallWhiteBag.add(sp);sp new Goods(鸭血, 1, 10);mediumBag.add(sp);mediumBag.add(smallRedBag);sp new Goods(土豆, 1, 3);BigBag.add(sp);BigBag.add(smallWhiteBag);BigBag.add(mediumBag);System.out.println(您选购的商品有);BigBag.show();s BigBag.calculation();System.out.println(要支付的总价是 s 元);}
}5.运行结果如下
您选购的商品有土豆(数量1单价3.0元)
羊肉(数量2单价38.0元)
红酒(数量3单价180.0元)
鸭血(数量1单价10.0元)
菠菜(数量2单价7.9元)
火锅底料(数量1单价9.9元)
要支付的总价是654.7元第四节
优缺点分析与适用场景
优点1.组合模式使客户端代码可以统一且通用的处理单个对象和组合对象无须关心自己处理的是单个对象还是组合对象简化了调用者的逻辑
2.在组合体内部增加对象变得很轻松,不需要修改源代码来增加新的对象.缺点:1.设计的过程中,要考虑满足类之前的通用抽象性,否则无法使用组合模式
2.如果限制具体构建,则很难限制.
3.不容易使用继承的方法来扩展新功能,只能使用别的方式适用场景1.当系统中一些对象能够按照一致的方式去处理,例如无限极菜单\无限极权限需要对象与整体同时使用。
2.需要隐藏组合对象与单个对象不同时不同的单个对象的特殊方法也不能被访问到的场景。
3.只需要客户端对抽象构建编程不需要考虑内部实现的场景。扫描二维码
关注我吧
IT小白架构师之路