当前位置: 首页 > news >正文

免费网页上传网站酒店网站建设注意什么

免费网页上传网站,酒店网站建设注意什么,陕西宁德建设工程有限公司网站,专业网站设计工作室目录 概述概念主要角色应用场景 组合模式的实现类图NS图基本代码组合模式的精髓意外收获#xff08;❀❀#xff09; 应用示例-公司组织架构管理需求结构图代码 组合模式的优缺点优点缺点 总结 概述 概念 组合模式是一种结构型设计模式#xff0c;它允许将对象组合成树形结… 目录 概述概念主要角色应用场景 组合模式的实现类图NS图基本代码组合模式的精髓意外收获❀❀ 应用示例-公司组织架构管理需求结构图代码 组合模式的优缺点优点缺点 总结 概述 概念 组合模式是一种结构型设计模式它允许将对象组合成树形结构来表示“部分-整体”的层次关系。组合模式允许客户端统一处理单个对象和组合对象使得客户端可以将它们视为相同的数据类型。     在组合模式中有两种主要类型的对象叶子对象和容器对象。叶子对象是组合的最小单位它不包含任何子对象而容器对象包含叶子对象和/或其他容器对象从而形成了一个递归的树形结构。 主要角色 Component组合中的对象声明接口它定义了组合对象的基本行为包括添加和删除组成部分等操作。 Leaf叶子是组合模式中的基本角色它表示组合对象中的单个对象通常是不可变的。叶子通常没有子节点它们只包含一些基本的属性和行为。 Composite是组合模式中的核心角色它由多个组件构成可以包含叶子节点和非叶子节点。组合对象是可变的它们可以通过添加或删除组成部分来改变自己的状态。组合对象负责管理自己的组成部分并提供一些特定于组合对象的操作如添加或删除组成部分等。 叶子节点和非叶子节点都是组件的一种它们都实现了 Component 接口。 在使用组合模式时客户端需要知道如何处理组合对象和单个对象以及如何使用抽象组件中定义的接口来访问它们的行为。具体组件和抽象组件则负责实现组合对象和单个对象的具体行为。组合对象则负责管理它包含的组成部分并提供一些特定于组合对象的操作。 应用场景 文件系统中的文件和文件夹菜单中的菜单项和菜单网页中的页面和页面元素 组合模式的实现 组合模式的实现需要定义一个抽象基类和两个具体的实现类。抽象基类中定义了组合对象和单个对象的共同接口具体实现类中分别实现了组合对象和单个对象的具体行为。 类图 NS图 基本代码 抽象类 abstract class Component {protected String name;public Component(String name){this.namename;}public abstract void add(Component component);public abstract void remove(Component component);public abstract void display(int depth); }组合对象 public class Composite extends Component {public ArrayListComponent children new ArrayListComponent();public Composite(String name) {super(name);}Overridepublic void add(Component component) {children.add(component);}Overridepublic void remove(Component component) {children.remove(component);}Overridepublic void display(int depth) {//显示枝结点名称for (var i 0; i depth; i) {System.out.print(-);}System.out.println(name);//对其下级进行遍历for (Component item : children) {item.display(depth 2);}} }叶子节点 public class Leaf extends Component{public Leaf(String name){super(name);}//为了消除叶子结点和枝结点的区别所以他们具备相同的接口即便叶子结点不需要这两个功能Overridepublic void add(Component component) {System.out.println(不能添加叶子了);}Overridepublic void remove(Component component) {System.out.println(不能移除叶子);}Overridepublic void display(int depth) { //叶子结点的显示方法只显示其名称和级别for(var i0;idepth;i){System.out.print(-);}System.out.println(name);} }客户端 public class Client {public static void main(String[] args) {Composite rootnew Composite(root);root.add(new Leaf(Leaf A));root.add(new Leaf(Leaf B));Component compnew Composite(composite X);comp.add(new Leaf(Leaf XA));comp.add(new Leaf(Leaf XB));root.add(comp);Component comp2new Composite(composite XY);comp2.add(new Leaf(Leaf XYA));comp2.add(new Leaf(Leaf XYB));comp.add(comp2);Leaf leafnew Leaf(leaf C);root.add((leaf));Leaf leaf2new Leaf(leaf D);root.add((leaf2));root.remove(leaf2);root.display(1);} } 输出结果 组合模式的精髓 在于将单个对象和组合对象统一对待从而使得客户端可以一视同仁地操作它们而无需关心其具体类型。这种设计思想体现了面向对象设计中的几个重要原则和模式 透明性组合模式通过将组合对象和叶子对象抽象成统一的组件类让客户端对它们进行透明处理。客户端不需要知道正在处理的是叶子对象还是组合对象只需通过统一的接口与它们交互。单一职责原则组合模式将对象的结构和行为分离开来每个对象专注于自己的职责。叶子对象负责完成具体的操作而组合对象负责管理子对象。易扩展性当系统需要增加新的叶子对象或组合对象时组合模式无需修改现有的客户端代码而是通过扩展组件类来实现。这提高了系统的灵活性和可扩展性。清晰的层次结构组合模式能够清晰地描述对象的层次结构使得系统的整体结构更加直观和易于理解。 在代码中的体现 客户端在创建对象时无论是Leaf还是Composite使用相同的构造函数或方法来创建对象比如new Leaf(“Leaf A”)和new Composite(“composite X”)。 在添加子对象时客户端使用相同的方法add来添加子对象无论是添加Leaf还是添加Composite对象。 在移除对象时客户端同样使用相同的方法remove来移除对象无论是移除Leaf还是移除Composite对象。 这些操作都体现了客户端代码以统一的方式处理单个对象和对象的组合而无需关心它们具体是哪一种类型。这种设计使得客户端代码更加简洁、清晰并且更容易适应系统变化。 这样的原因除了因为Composite和leaf都继承于Component。也可以从树的角度进行思考比如下图当把组合对象以及下面的叶对象看出一个整体对于根组合对象来说也可以当成一个叶对象。 意外收获❀❀ 调试代码中还看到了一个特别有意思的现象     创建Composite对象的时候先走父类构造方法此时childrennull     走完父类构造之后先走了public ArrayList children new ArrayList();之后childrensize0,再这之后才结束构造方法     children的变化说明了什么呢为什么会这样呢 因为在Java中当一个对象被创建时成员变量会先被初始化为默认值对于引用类型来说默认值是null。这也解释了为什么在调试时会看到children开始是null。 children的变化如下 首先children作为Composite的成员变量被初始化为null。     然后会调用Composite父类的构造函数super(name)来初始化父类的属性和状态。     最后执行Composite类的构造函数体中的其他代码在这里手动将children赋值为new ArrayList()来创建一个新的ArrayList对象并赋给children。 因此在调试时会看到children开始是null然后在执行完父类构造函数之后children才不是null。 最后想说 在Java中类的实例化过程分为以下几个步骤 1、所有的成员变量包括实例变量和类变量都会先被初始化为默认值。对于引用类型来说默认值是null对于数值类型来说默认值是0或0.0布尔类型的默认值是false。 2、然后会调用相应的构造函数进行初始化其中可以在构造函数中对成员变量进行进一步赋值或初始化操作。 在调试时看到children开始是null正是因为它在实例化时被初始化为默认值null。而在执行完父类构造函数后手动将children赋值为new ArrayList()从而创建了一个新的ArrayList对象并赋给children。 再加一条作为一个带着叶子节点的Composite是组合好一家子之后才往父节点挂靠的也就和前面我说的作为一个整体可以看成一个叶子。 具体代码如下 示意图     虽然代码中取名children不要理解成子节点举个例子如果Composite是妈妈children不是孩子而是子宫子宫用来添加孩子叶子说这个的原因是因为我被开始的自己的理解蠢哭了 应用示例-公司组织架构管理 需求 使用组合模式管理公司组织架构可以帮助公司更好地组织和管理其内部的部门、员工以及其它相关的业务实体。业务需求层级结构管理公司内部通常存在多层级的组织结构包括总公司、分公司、部门、小组等。需要一个灵活的方式来管理这种层级关系使得可以方便地进行增加、删除、修改各个层级的组织单元。 结构图 代码 抽象公司类 abstract class Company {protected String name;public Company(String name ){this.namename;}public abstract void add(Company company);public abstract void remove(Company company);public abstract void display(int dept);public abstract void lineOfDuty();//履行职责不同部门需履行不同的职责 }组织类 public class ConcreteCompany extends Company {protected ArrayListCompany children new ArrayListCompany();public ConcreteCompany(String name) {super(name);}Overridepublic void add(Company company) {children.add(company);}Overridepublic void remove(Company company) {children.remove(company);}Overridepublic void display(int dept) {for (var i 0; i dept; i)System.out.print(-);System.out.println(name);for (Company item : children) {item.display(dept 2);//为什么2}}Overridepublic void lineOfDuty() {for (Company item : children) {item.lineOfDuty();}} }财务部门 public class FinanceDepartment extends Company{public FinanceDepartment(String name){super(name);}Overridepublic void add(Company company) {}Overridepublic void remove(Company company) {}Overridepublic void display(int dept) {for (var i 0; i dept ; i) {System.out.print(-);}System.out.println(name);}Overridepublic void lineOfDuty() {System.out.println(name公司财务管理);} }人事部门 public class HRDepartment extends Company{public HRDepartment(String name){super(name);}Overridepublic void add(Company company) {}Overridepublic void remove(Company company) {}Overridepublic void display(int dept) {for (var i 0; i dept ; i) {System.out.print(-);}System.out.println(name);}Overridepublic void lineOfDuty() {System.out.println(name员工招聘培训管理);} }客户端 public class Client {public static void main(String[] args) {Company rootnew ConcreteCompany(北京总公司);root.add(new HRDepartment(总公司人力资源部));root.add(new FinanceDepartment(总公司财务部));Company compnew ConcreteCompany(西南分公司);comp.add(new HRDepartment(西南分公司人力资源部));comp.add(new FinanceDepartment(西南分公司财务部) );root.add(comp);Company comp2new ConcreteCompany(成都分公司);comp2.add(new HRDepartment(成都分公司人力资源部));comp2.add(new FinanceDepartment(成都分公司财务部) );comp.add(comp2);Company comp3new ConcreteCompany(重庆分公司);comp3.add(new HRDepartment(重庆分公司人力资源部));comp3.add(new FinanceDepartment(重庆分公司财务部) );comp.add(comp3);System.out.println(结构图);root.display(1);System.out.println(职责);root.lineOfDuty();} } 输出结果 组合模式的优缺点 优点 可以将复杂的层次结构变得简单化可以统一处理组合对象和单个对象可以提高代码的复用性和可维护性 缺点 对于大型的层次结构组合模式可能会导致性能问题组合模式的实现需要定义多个类增加了代码量组合模式的理解和实现需要一定的设计模式知识 总结 组合模式是一种常用的设计模式它可以将复杂的层次结构变得简单化并且可以统一处理组合对象和单个对象。通过组合模式可以将客户端代码与对象的层次结构分离客户端只需要面向抽象构件Component进行操作无需关心具体是哪种类型的对象。     总的来说组合模式的核心思想是将对象组织成树形结构并提供统一的接口使得客户端可以一致地处理单个对象和对象的组合。这种模式在处理具有层次结构的对象时非常有用如组织架构、文件系统等。
http://www.dnsts.com.cn/news/72775.html

相关文章:

  • 校园招聘网站策划书ipv6网络设计案例
  • 网站开发的网站杭州公司注册费用
  • 仙桃网站建设公司十大男装私人定制品牌
  • 外贸网站运营怎么做关于网站建设的广告词
  • 成都建设厅官方网站设置网站首页
  • wordpress网站聊天插件wordpress用thinkphp
  • 建设局工程网站建设网站公司怎么收费
  • 织梦搭建本地网站姓名域名
  • 百度收录公司网站招聘网站花钱做的简历有用没
  • 本地电脑做网站服务器网站更新迭代
  • 泰安有口碑的企业建站公司品牌广告投放
  • 请问做网站需要什么软件网建企业
  • 怎样用网站做单笔外贸wordpress进数据库
  • 网站最下端怎么做西宁网络推广服务网
  • 酒店房产网站建设科技管理信息网站的建设方案
  • html5 移动网站响应式网站多少价格
  • 泉州优化怎么做搜索搜索引擎优化定义
  • 合租网站设计南通市网站建设
  • 徐州市网站开发昆明网站建设公司猫咪科技
  • 公司网站定位建议做网页要去哪个网站
  • 网站快速被百度收录全国文明城市创建内容
  • 企业网站禁忌企业网站首页效果图
  • 苏州 网站制作公司微信小程序设计开发团队
  • asp网站 攻击网站推广总结
  • 永州市规划建设局网站站群 wordpress
  • 做粥哪个美食网站好什么专业可以做网站编辑
  • 网站的链接要怎么做什么是域名解析错误
  • 戴尔电脑网站建设方案范文梅州建站网络有限公司
  • 中国石化工程建设公司网站wordpress需要多大主机
  • 如何做企业网站宣传软文内容