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

嘉兴手机网站制作fotor懒设计 app

嘉兴手机网站制作,fotor懒设计 app,泉州网站建设托管,求8x新的域名JAVA设计模式——(二)组合模式 原理解释实现定义规范接口定义主干定义分支定义叶子测试代码 优势 原理 组合模式用于描述对象在“整体-部分”中的关系,用户对单个对象和组合对象的使用具有一致性。 组合模式中由于单个对象和组合对象的使用…

JAVA设计模式——(二)组合模式

  • 原理
  • 解释
  • 实现
    • 定义规范接口
    • 定义主干
    • 定义分支
    • 定义叶子
    • 测试代码
  • 优势

原理

组合模式用于描述对象在“整体-部分”中的关系,用户对单个对象和组合对象的使用具有一致性。

组合模式中由于单个对象和组合对象的使用具有一致性,所以需要定义组合对象中共有方法和属性,规范行为的接口。

解释

在组合模式中,整体与部分的关系,可以看成树形结构,一棵大树,有主干,有叶子。但是都是属于树的一部分,只不过叶子是附着在不同的枝干上面,枝杈又在主干上面。所以通过这种形式,便可以很快的构建出树状形式的结构。

最常见的例子,便是公司的结构。公司中有部门和员工,部门构成分支,员工是每个分支的节点,且部分隶属于公司。所以公司的结构信息是典型的组合模式。

实现

定义规范接口

规范接口用于统一各部分的行为。

package cn.sh.designepattern;import java.util.ArrayList;
import java.util.List;/*** @Author song* @Version 0.0.1* @Date 2025/4/22 14:48* @Contact 643947568@qq.com*/
public interface Company {public void addComponent(Company company);public void removeComponent(Company company);public void getInfo();public List<Company> getComponents();
}

定义主干

package cn.sh.designepattern;import java.util.ArrayList;
import java.util.List;/*** @Author song* @Version 0.0.1* @Date 2025/4/22 15:02* @Contact 643947568@qq.com*/
public class ActualCompany implements Company{private final List<Company> companies = new ArrayList<>();private String name;private String position;private int salary;public ActualCompany(String name, String position, int salary) {this.salary = salary;this.position = position;this.name = name;}@Overridepublic void addComponent(Company company) {companies.add(company);}@Overridepublic void removeComponent(Company company) {companies.remove(company);}@Overridepublic void getInfo() {System.out.println(this);}@Overridepublic List<Company> getComponents() {return companies;}@Overridepublic String toString() {return "Department{" +"companies=" + companies +", name='" + name + '\'' +", position='" + position + '\'' +", salary='" + salary + '\'' +'}';}
}

定义分支

package cn.sh.designepattern;import java.util.ArrayList;
import java.util.List;/*** @Author song* @Version 0.0.1* @Date 2025/4/22 14:51* @Contact 643947568@qq.com*/
public class Department implements Company {private final List<Company> companies = new ArrayList<>();private String name;private String position;private int salary;public Department(String name, String position, int salary) {this.salary = salary;this.position = position;this.name = name;}@Overridepublic void addComponent(Company company) {companies.add(company);}@Overridepublic void removeComponent(Company company) {companies.remove(company);}@Overridepublic void getInfo() {System.out.println(this);}@Overridepublic List<Company> getComponents() {return companies;}@Overridepublic String toString() {return "Department{" +"companies=" + companies +", name='" + name + '\'' +", position='" + position + '\'' +", salary='" + salary + '\'' +'}';}
}

定义叶子

package cn.sh.designepattern;import java.util.ArrayList;
import java.util.List;/*** @Author song* @Version 0.0.1* @Date 2025/4/22 14:55* @Contact 643947568@qq.com*/
public class Employee implements Company {private final List<Company> companies = new ArrayList<>();private String name;private String position;private int salary;public Employee(String name, String position, int salary) {this.name = name;this.position = position;this.salary = salary;}@Overridepublic void addComponent(Company company) {companies.add(company);}@Overridepublic void removeComponent(Company company) {companies.remove(company);}@Overridepublic void getInfo() {System.out.println(this);}@Overridepublic List<Company> getComponents() {return companies;}@Overridepublic String toString() {return "Employee{" +"companies=" + companies +", name='" + name + '\'' +", position='" + position + '\'' +", salary='" + salary + '\'' +'}';}
}

测试代码

package cn.sh.designepattern;/*** @Author song* @Version 0.0.1* @Date 2025/4/21 21:33* @Contact 643947568@qq.com*/public class Main {public static void main(String[] args) {Company developDept = new Department("张三", "开发部主管", 10000);Company financeDept = new Department("张三", "财务部主管", 20000);Company saleDept = new Department("张三", "销售部主管", 30000);Company develop1 = new Employee("A", "开发部员工", 500);Company develop2 = new Employee("B", "开发部员工", 600);Company develop3 = new Employee("C", "开发部员工", 700);Company finance1 = new Employee("D", "财务部员工", 200);Company finance2 = new Employee("E", "财务部员工", 6500);Company finance3 = new Employee("F", "财务部员工", 700);Company sale1 = new Employee("G", "销售部员工", 1500);Company sale2 = new Employee("H", "销售部员工", 4600);Company sale3 = new Employee("I", "销售部员工", 5700);Company actualCompany = new ActualCompany("公司", "公司", 0);actualCompany.addComponent(developDept);actualCompany.addComponent(financeDept);actualCompany.addComponent(saleDept);developDept.addComponent(develop1);developDept.addComponent(develop2);developDept.addComponent(develop3);financeDept.addComponent(finance1);financeDept.addComponent(finance2);financeDept.addComponent(finance3);saleDept.addComponent(sale1);saleDept.addComponent(sale2);saleDept.addComponent(sale3);displayCompanyInfo(actualCompany);}private static void displayCompanyInfo(Company actualCompany) {actualCompany.getComponents().forEach(company -> {if (company instanceof Employee){company.getInfo();}else {company.getInfo();displayCompanyInfo(company);}});}
}

优势

组合模式适用于描述整体与部分之间的关系场景,对于上述的公司结构、文件夹结构等树形结构较有效,但是容易结构混乱,仅适用于结构简单的结构。

http://www.dtcms.com/wzjs/586068.html

相关文章:

  • 网站后台管理无法编辑游戏开发需要多少钱
  • 移动网站建设方案网络营销策划方案范本
  • 硅塑胶 东莞网站建设广东建设网站首页
  • quiz在哪个网站做网站 建立目录出错
  • wordpress可以建哪些网站网站建设需要个体营业执照吗
  • 免费发帖网站大全长春建设工程信息网站
  • 买房网站排名天津站建站时间
  • 盐城公司做网站招远做网站公司
  • wap手机网站 作用做网站营销公司
  • 吉林市网站建设公司哪家好池州网站建设公司
  • 阿里巴巴的网站怎么做的不用买服务器可以做网站
  • 佛山制作网站设计报价怎么制作游戏脚本
  • 网上商城建站工作室怎样用linux做网站
  • 百度怎样做网站并宣传网站软文营销什么意思
  • 如何制作自己的作品集网站北京 网站 公司
  • 哪些网站可以做招生信息icp备案查询站长之家
  • html5网站源代码下载宁波网站建设的价格表
  • 郑州哪个网站建设最好东莞建设网站培训
  • stanley工具网站开发中国十大建筑设计院排名
  • 怎么进入网站管理页面app应用下载网站源码
  • 成都市建设领域信用系统网站撰写超越时空网上书城网站策划书
  • 个人怎么建立网站wordpress 升级 权限
  • 电商培训类网站模板网站布局设计教程
  • 做网站的镜像是什么意思郑州网站公司助企
  • 东莞官方网站 优帮云做技术分享网站 盈利
  • 厦门哪家网站建设最好wordpress一数据库多网站
  • 空间购买后打不开网站深圳微信网站制作
  • dw免费网站模板镇江网站建设一般多少钱
  • 青岛做外贸网站哪家好如何查一个关键词的搜索量
  • 做影视网站算侵权吗目前做的最好的招聘网站