结构设计模式 - 复合设计模式

 2023-09-06 阅读 19 评论 0

摘要:结构设计模式 -复合设计模式 复合设计模式是结构设计模式之一。当我们必须表示部分整体层次结构时,使用复合设计模式,复合设计模式模式又被称为组合设计模式。 目录[隐藏] 1复合设计模式 1.1复合设计模式 基础组件1.2复合设计模式 叶对象1.3复合设计模式 对

 

结构设计模式 - 复合设计模式

 

复合设计模式是结构设计模式之一。当我们必须表示部分整体层次结构时,使用复合设计模式,复合设计模式模式又被称为组合设计模式。

 

 

目录[ 隐藏 ]

  • 1复合设计模式
    • 1.1复合设计模式 基础组件
    • 1.2复合设计模式 叶对象
    • 1.3复合设计模式 对象
    • 1.4复合设计模式 客户端程序
    • 1.5复合设计模式 重点

 

复合设计模式

复合图案,复合设计图案

当我们需要以一种必须以相同方式处理结构中的对象的方式创建结构时,我们可以应用复合设计模式。

让我们用一个真实的例子来理解它 - 图是一个由诸如圆形,线条,三角形等对象组成的结构。当我们用颜色填充图形(比如红色)时,相同的颜色也会被应用到对象中。画画。这里的图纸由不同的部分组成,它们都有相同的操作。

复合模式由以下对象组成。

  1. 基本组件 - 基本组件是组合中所有对象的接口,客户端程序使用基本组件来处理组合中的对象。它可以是一个接口或一个抽象类,其中包含所有对象共有的一些方法。
  2. Leaf - 定义合成中元素的行为。它是组合的构建块并实现基本组件。它没有引用其他组件。
  3. Composite - 它由叶元素组成,并在基本组件中实现操作。

在这里,我将复合设计模式应用于绘图场景。

 

复合设计模式 基础组件

复合模式基础组件定义了叶子和复合材料的常用方法。我们可以Shape使用一种方法创建一个类draw(String fillColor)来绘制具有给定颜色的形状。

Shape.java


package com.journaldev.design.composite;public interface Shape {public void draw(String fillColor);
}

复合设计模式叶对象

复合设计模式叶实现基础组件,这些是组合的构建块。我们可以创建多个叶子对象,如Triangle,Circle等。

Triangle.java


package com.journaldev.design.composite;public class Triangle implements Shape {@Overridepublic void draw(String fillColor) {System.out.println("Drawing Triangle with color "+fillColor);}}

Circle.java


package com.journaldev.design.composite;public class Circle implements Shape {@Overridepublic void draw(String fillColor) {System.out.println("Drawing Circle with color "+fillColor);}}

复合对象

复合对象包含叶对象组,我们应该提供一些辅助方法来添加或删除组中的叶子。我们还可以提供一种方法来从组中删除所有元素。

Drawing.java


package com.journaldev.design.composite;import java.util.ArrayList;
import java.util.List;public class Drawing implements Shape{//collection of Shapesprivate List<Shape> shapes = new ArrayList<Shape>();@Overridepublic void draw(String fillColor) {for(Shape sh : shapes){sh.draw(fillColor);}}//adding shape to drawingpublic void add(Shape s){this.shapes.add(s);}//removing shape from drawingpublic void remove(Shape s){shapes.remove(s);}//removing all the shapespublic void clear(){System.out.println("Clearing all the shapes from drawing");this.shapes.clear();}
}

请注意,复合也实现了组件和行为类似于叶,除了它可以包含叶元素组。

复合图案,复合设计模式Java

我们的复合模式实现已准备好,我们可以使用客户端程序对其进行测试。

复合设计模式客户端程序

TestCompositePattern.java


package com.journaldev.design.test;import com.journaldev.design.composite.Circle;
import com.journaldev.design.composite.Drawing;
import com.journaldev.design.composite.Shape;
import com.journaldev.design.composite.Triangle;public class TestCompositePattern {public static void main(String[] args) {Shape tri = new Triangle();Shape tri1 = new Triangle();Shape cir = new Circle();Drawing drawing = new Drawing();drawing.add(tri1);drawing.add(tri1);drawing.add(cir);drawing.draw("Red");drawing.clear();drawing.add(tri);drawing.add(cir);drawing.draw("Green");}}

上述复合模式客户端程序的输出是:


Drawing Triangle with color Red
Drawing Triangle with color Red
Drawing Circle with color Red
Clearing all the shapes from drawing
Drawing Triangle with color Green
Drawing Circle with color Green

复合模式重点

  • 仅当对象组应表现为单个对象时,才应应用复合模式。
  • 复合设计模式可用于创建树状结构。

java.awt.Container#add(Component) 是java中复合模式的一个很好的例子,在Swing中使用了很多。

早期的结构设计模式文章:

  • Java中的桥模式
  • Java中的适配器设计模式

 

转载来源:https://www.journaldev.com/1535/composite-design-pattern-in-java

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/4249.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息