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

194 篇文章 3 订阅
23 篇文章 0 订阅

 

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

 

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

 

 

目录[ 隐藏 ]

 

复合设计模式

复合图案,复合设计图案

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

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

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

  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 {

	@Override
	public void draw(String fillColor) {
		System.out.println("Drawing Triangle with color "+fillColor);
	}

}

Circle.java


package com.journaldev.design.composite;

public class Circle implements Shape {

	@Override
	public 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 Shapes
	private List<Shape> shapes = new ArrayList<Shape>();
	
	@Override
	public void draw(String fillColor) {
		for(Shape sh : shapes)
		{
			sh.draw(fillColor);
		}
	}
	
	//adding shape to drawing
	public void add(Shape s){
		this.shapes.add(s);
	}
	
	//removing shape from drawing
	public void remove(Shape s){
		shapes.remove(s);
	}
	
	//removing all the shapes
	public 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中使用了很多。

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

 

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值