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

迅驰互联网站建设网络推广怎么样益阳市城乡和住房建设部网站

迅驰互联网站建设网络推广怎么样,益阳市城乡和住房建设部网站,正规的丹阳网站建设,ui要学哪些知识我们很容易将“组合模式”和“组合关系”搞混。组合模式最初只是用于解决树形结构的场景#xff0c;更多的是处理对象组织结构之间的问题。而组合关系则是通过将不同对象封装起来完成一个统一功能. 组合模式介绍 组合模式(Composite Pattern) 的定义是#xff1a;将对象组合…我们很容易将“组合模式”和“组合关系”搞混。组合模式最初只是用于解决树形结构的场景更多的是处理对象组织结构之间的问题。而组合关系则是通过将不同对象封装起来完成一个统一功能. 组合模式介绍 组合模式(Composite Pattern) 的定义是将对象组合成树形结构以表示整个部分的层次结构.组合模式可以让用户统一对待单个对象和对象的组合. 比如: windows操作系统中的目录结构,其实就是树形目录结构,通过tree命令实现树形结构展示. 在上图中包含了文件夹和文件两类不同元素,其中在文件夹中可以包含文件,还可以继续包含子文件夹.子文件夹中可以放入文件,也可以放入子文件夹. 文件夹形成了一种容器结构(树形结构),递归结构. 接着我们再来思考虽然文件夹和文件是不同类型的对象,但是他们有一个共性,就是 都可以被放入文件夹中. 其实文件和文件夹可以被当做是同一种对象看待. 组合模式其实就是将一组对象(文件夹和文件)组织成树形结构,以表示一种部分-整体 的层次结构,(目录与子目录的嵌套结构). 组合模式让客户端可以统一单个对象(文件)和组合对象(文件夹)的处理逻辑(递归遍历). 组合模式更像是一种数据结构和算法的抽象,其中数据可以表示成树这种数据结构,业务需求可以通过在树上的递归遍历算法来实现. 组合模式原理 组合模式主要包含三种角色 抽象根节点Component定义系统各层次对象的共有方法和属性可以预先定义一些默认行为和属性。 在该角色中可以包含所有子类共有行为的声明和实现.在抽象根节点中定义了访问及管理它的子构建的方法,如增加子节点、删除子节点、获取子节点等. 树枝节点Composite定义树枝节点的行为存储子节点组合树枝节点和叶子节点形成一个树形结构。 树枝节点可以包含树枝节点,也可以包含叶子节点,它其中有一个集合可以用于存储子节点,实现了在抽象根节点中定义的行为.包括那些访问及管理子构建的方法,在其业务方法中可以递归调用其子节点的业务方法. 叶子节点Leaf叶子节点对象其下再无分支是系统层次遍历的最小单位。 在组合结构中叶子节点没有子节点,它实现了在抽象根节点中定义的行为. 组合模式实现 组合模式的关键在于定义一个抽象根节点类,它既可以代表叶子,又可以代表树枝节点,客户端就是针对该抽象类进行编程,不需要知道它到底表示的是叶子还是容器,可以对其进行统一处理. 树枝节点对象和抽象根节点类之间建立了一个聚合关联关系,在树枝节点对象中既可以包含叶子节点,还可以继续包含树枝节点,以此实现递归组合,形成一个树形结构. 代码实现 /*** 抽象根节点* 对于客户端而言将针对抽象编程,无需关心其具体子类是容器构建还是叶子构建.**/ public abstract class Component {public abstract void add(Component c); //增加成员public abstract void remove(Component c); //删除成员public abstract Component getChild(int i); //获取成员public abstract void operation(); //业务方法}/*** 叶子节点* 叶子节点中不能包含子节点**/ public class Leaf extends Component {Overridepublic void add(Component c) {//具体操作}Overridepublic void remove(Component c) {//具体操作}Overridepublic Component getChild(int i) {//具体操作return new Leaf();}Overridepublic void operation() {//叶子节点具体业务方法} }/*** 树枝节点* 容器对象,可以包含子节点**/ public class Composite extends Component {private ArrayListComponent list new ArrayList();Overridepublic void add(Component c) {list.add(c);}Overridepublic void remove(Component c) {list.remove(c);}Overridepublic Component getChild(int i) {return (Component) list.get(i);}Overridepublic void operation() {//在树枝节点中的业务方法,将递归调用其他节点中的operation() 方法for (Component component : list) {component.operation();}} } 组合模式应用实例 下面我们通过一段程序来演示一下组合模式的使用. 程序的功能是列出某一目录下所有的文件和文件夹.类图如下: 我们按照下图的表示,进行文件和文件夹的构建. Entry类: 抽象类,用来定义File类和Directory类的共性内容 /*** Entry抽象类,表示目录条目(文件文件夹)的抽象类**/ public abstract class Entry {public abstract String getName(); //获取文件名public abstract int getSize(); //获取文件大小//添加文件夹或文件public abstract Entry add(Entry entry);//显示指定目录下的所有信息public abstract void printList(String prefix);Overridepublic String toString() {return getName() ( getSize() );} } File类,叶子节点,表示文件. /*** File类 表示文件**/ public class File extends Entry {private String name; //文件名private int size; //文件大小public File(String name, int size) {this.name name;this.size size;}Overridepublic String getName() {return name;}Overridepublic int getSize() {return size;}Overridepublic Entry add(Entry entry) {return null;}Overridepublic void printList(String prefix) {System.out.println(prefix / this);}} Directory类,树枝节点,表示文件 /*** Directory表示文件夹**/ public class Directory extends Entry{//文件的名字private String name;//文件夹与文件的集合private ArrayListEntry directory new ArrayList();//构造函数public Directory(String name) {this.name name;}//获取文件名称Overridepublic String getName() {return this.name;}/*** 获取文件大小* 1.如果entry对象是File类型,则调用getSize方法获取文件大小* 2.如果entry对象是Directory类型,会继续调用子文件夹的getSize方法,形成递归调用.*/Overridepublic int getSize() {int size 0;//遍历或者去文件大小for (Entry entry : directory) {size entry.getSize();}return size;}Overridepublic Entry add(Entry entry) {directory.add(entry);return this;}//显示目录Overridepublic void printList(String prefix) {System.out.println(/ this);for (Entry entry : directory) {entry.printList(/ name);}} } 测试 public class Client {public static void main(String[] args) {//根节点Directory rootDir new Directory(root);//树枝节点Directory binDir new Directory(bin);//向bin目录中添加叶子节点binDir.add(new File(vi,10000));binDir.add(new File(test,20000));Directory tmpDir new Directory(tmp);Directory usrDir new Directory(usr);Directory mysqlDir new Directory(mysql);mysqlDir.add(new File(my.cnf,30));mysqlDir.add(new File(test.db,25000));usrDir.add(mysqlDir);rootDir.add(binDir);rootDir.add(tmpDir);rootDir.add(mysqlDir);rootDir.printList();} } 组合模式总结 1 ) 组合模式的分类 透明组合模式 透明组合模式中抽象根节点角色中声明了所有用于管理成员对象的方法比如在示例中 Component 声明了 add、remove 、getChild 方法这样做的好处是确保所有的构建类都有相同的接口。透明组合模式也是组合模式的标准形式。 透明组合模式的缺点是不够安全因为叶子对象和容器对象在本质上是有区别的叶子对象不可能有下一个层次的对象即不可能包含成员对象因此为其提供 add()、remove() 等方法是没有意义的这在编译阶段不会出错但在运行阶段如果调用这些方法可能会出错如果没有提供相应的错误处理代码   在安全组合模式中在抽象构建角色中没有声明任何用于管理成员对象的方法而是在树枝节点类中声明并实现这些方法。安全组合模式的缺点是不够透明因为叶子构建和容器构建具有不同的方法且容器构建中那些用于管理成员对象的方法没有在抽象构建类中定义因此客户端不能完全针对抽象编程必须有区别地对待叶子构建和容器构建。 2 ) 组合模式优点 组合模式可以清楚地定义分层次的复杂对象表示对象的全部或部分层次它让客户端忽略了层次的差异方便对整个层次结构进行控制。 客户端可以一致地使用一个组合结构或其中单个对象不必关心处理的是单个对象还是整个组合结构简化了客户端代码。 在组合模式中增加新的树枝节点和叶子节点都很方便无须对现有类库进行任何修改符合“开闭原则”。 组合模式为树形结构的面向对象实现提供了一种灵活的解决方案通过叶子节点和树枝节点的递归组合可以形成复杂的树形结构但对树形结构的控制却非常简单。 3 ) 组合模式的缺点 使用组合模式的前提在于你的业务场景必须能够表示成树形结构。所以组合模式的应用场景也 比较局限它并不是一种很常用的设计模式。 4 ) 组合模式使用场景分析 处理一个树形结构比如公司人员组织架构、订单信息等 跨越多个层次结构聚合数据比如统计文件夹下文件总数 统一处理一个结构中的多个对象比如遍历文件夹下所有 XML 类型文件内容。
http://www.sczhlp.com/news/155411/

相关文章:

  • 微网站自己怎么做的云南建投第五建设有限公司网站
  • 网页设计制作网站网站建设及推广预算表
  • 云酒店网站建设wordpress拖拽式
  • 做自适应网站注意事项怎样才能建立网站
  • 网站开发导航网站开发有几种类型
  • 互联网招聘网站wordpress code插件
  • 潍坊网站制作保定公司城乡建设网站报建需要什么
  • 国内网站开发平台哪家强软件工程职业生涯规划书
  • 做公司网站需注意什么wordpress 页面和文章
  • 网站开发工具发展史企业微信功能开发
  • 网站模板下载 免费百度品牌推广
  • 北京的制作网站的公司在哪里做网站学的什么专业
  • 网站怎么建立支付平台如何建立和设置公司网站
  • 简单网站开发工具wordpress 标签 标题
  • app商城需要手机网站吗作品提示优化要删吗
  • 域名商的网站网页设计一个网站
  • 商场网站开发柳州电商网站建设
  • 自己做的php网站进行伪静态德国服务器网站
  • 做网站dreamwa做网站起什么题目
  • 必应网站管理员工具网站优化软件费用
  • 在疼痛中锚定前路
  • AdGuard广告拦截器APP v4.11.63 / 4.13.7 Nightly 修改版
  • 网站建设属于什么类目西安网站推广建设
  • 腾讯 网站建设信息产业部网站备案系统
  • 做网站首页ps中得多大短链接生成器手机版
  • 乐清网站定制公司哪家好烟台市龙口建设局网站
  • 做废铁在哪个网站推广重庆网站推广运营
  • 网站建设英文怎么说dw网页设计代码编写
  • 网站建设需要钱吗品牌策划经典案例
  • 腾和企业网站 优帮云手机无法打开网页如何解决