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:
- 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.
- 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.
- 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.javapackage com.journaldev.design.composite; public interface Shape { public void draw(String fillColor); }
2. Leaf objects
Triangle.javapackage com.journaldev.design.composite; public class Triangle implements Shape { @Override public void draw(String fillColor) { System.out.println("Drawing Triangle with color "+fillColor); } }
Circle.javapackage 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.javapackage 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.javapackage 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