美文网首页
设计模式第6篇:复合模式

设计模式第6篇:复合模式

作者: 大厂offer | 来源:发表于2017-12-12 11:18 被阅读26次

本文翻译自:https://www.journaldev.com/1535/composite-design-pattern-in-java

Composite Design Pattern in Java

这种模式是基于具有共同行为的多个对象的存在,用于构建更大的对象。较大的对象仍然具有与最小对象相同的特征。

让我们用一个真实生活案例来解释:一个图表是用圆、直线、长方形等构成。当我们用颜料来画画的时候,相同的颜色会被重复使用,画图的过程是一个重复的过程,里面的一些操作是相同的;

复合模式由以下几个方面构成:

  • Base Component:Base Component是所有对象的接口,它可以是一个抽象类或interface;
  • Leaf : 定义了元素的行为,实现了Base Component,并与其他组件无引用关系;
  • Composite : 由Leaf 构成,实现了Base Component中的操作方法;

接下来使用一个画画的例子来例证:

Base Component

复合模式的Base Component为Leaf和Composites 定义了一些普通的方法,我们可以创建一个Shape类,包含一个draw(String fillColor) 方法,其可以指定颜色;

Shape.java

package com.journaldev.design.composite;

public interface Shape {
    
    public void draw(String fillColor);
}

Leaf Objects

Leaf实现了Base Component接口,它是Composite的构建区块,我们可以创建多个Leaf,比如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);
    }

}

Composite object

Composite 包含了一组Leaf组件,所以在Composite 内部提供了一些add和delete方法来增加或删除Leaf组件,也可以提供remove all将所有Leaf删除。

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();
    }
}

Composite Design Pattern Client Program

然后对该模式进行测试: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

相关文章

  • spring框架中的设计模式二

    在这篇文章中,介绍4种设计模式。结构型设计模式:代理和复合模式。行为型设计模式:策略和模板方法模式。 代理模式 面...

  • 设计模式第6篇:复合模式

    本文翻译自:https://www.journaldev.com/1535/composite-design-pa...

  • iOS MVC模式

    一、概述 MVC模式是一种复合设计模式,由“观察者”(Observer)模式、“策略”(Strategy)模式和“...

  • iOS知识梳理4:MVC和一些其他的架构模式

    接着上一章设计模式,前面三种单例模式, 委托模式, 观察者模式都是比较局部的设计模式...下面讲一些复合设计模...

  • 《设计模式》之复合模式(MVC)

    复合模式:就是将多种设计模式融合在一起,实现一个更高阶的功能,一个非常经典的复合模式就是MVC。 MVC模式在过去...

  • MVC复合模式摘要

    复合模式复合模式就是多个模式之间相互之间进行协助产生的一种新的模式;典型的MVC模式就是复合模式;MVC模式的构成...

  • 设计模式 - 观察者模式

    观察者模式的定义 观察者模式简述 MVC是由各种复杂的设计模式组合而成的复合结构,观察者是其中的设计模式之一。视图...

  • 第三周学习笔记Boolan

    窗体顶端 继承复合委托 复合Comosition表示hasa 设计模式 Adapter(改造 适配 配接) que...

  • Java 设计模式(14) —— 复合模式

    一、复合模式 模式常一起使用,组合在一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式,能解决一般性或...

  • 《PHP设计模式大全》系列分享专栏

    php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页 介绍php设计模式中的工厂模式...

网友评论

      本文标题:设计模式第6篇:复合模式

      本文链接:https://www.haomeiwen.com/subject/rougixtx.html