Composite Pattern

Composite Pattern

Composite Pattern được sử dụng để biểu đạt cấu trúc phân cấp cục bộ - toàn thể. Để dễ hiểu hơn về Composite pattern có thể xem xét ví dụ sau.
Ví dụ: Một hình vẽ (diagram) chứa các đối tượng như: vòng tròn, đường thẳng hay tam giác, .v.v. Khi chúng ta tô màu cho các hình khác nhau này, thì thao tác tô màu đều như nhau đối với các đối tượng trên.
Composite pattern chứa các đối tượng sau:

  1. Base component: là giao diện (interface) cho tất cả các đối tượng trong composition. Abstract class có thể được sử dụng để thay thế cho interface.
  2. Leaf: Định nghĩa hành vi của các phần tử trong composition. Nói cách khác là implement interface và không tham chiếu đến các thành phần khác.
  3. Composite: nó chứa đựng tất cả các phần tử leaf và thực thi các hành vi được định nghĩa ở base component.
1. Base component

Shape.java
package com.journaldev.design.composite;

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


2. Leaf objects

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

}


3. Composite object

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


4. Chương trình sử dụng

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

}


Kết quả hiển thị

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





No comments :

Post a Comment