复合设计模式是结构设计模式之一。当我们必须表示部分整体层次结构时,使用复合设计模式,复合设计模式模式又被称为组合设计模式。
目录[ 隐藏 ]
当我们需要以一种必须以相同方式处理结构中的对象的方式创建结构时,我们可以应用复合设计模式。
让我们用一个真实的例子来理解它 - 图是一个由诸如圆形,线条,三角形等对象组成的结构。当我们用颜色填充图形(比如红色)时,相同的颜色也会被应用到对象中。画画。这里的图纸由不同的部分组成,它们都有相同的操作。
复合模式由以下对象组成。
在这里,我将复合设计模式应用于绘图场景。
复合模式基础组件定义了叶子和复合材料的常用方法。我们可以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();}
}
请注意,复合也实现了组件和行为类似于叶,除了它可以包含叶元素组。
我们的复合模式实现已准备好,我们可以使用客户端程序对其进行测试。
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中使用了很多。
早期的结构设计模式文章:
转载来源:https://www.journaldev.com/1535/composite-design-pattern-in-java
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态