Decorator Pattern
Decorator Pattern được sử dụng để chỉnh sửa chức năng của một đối tượng trong thời gian chạy (runtime). Ở cùng thời điểm, những instance khác của cùng lớp sẽ không bị ảnh hưởng bởi hành động này. Chỉ có đối tượng riêng biệt nhận chỉnh sửa này mới bị tác động mà thôi.
Giả sử chúng ta muốn implement nhiều loại xe hơi khác nhau - chúng ta có thể tạo ra một interface Car để định nghĩa các phương thức chung và chúng ta có một kiểu xe cơ bản. Tiếp theo chúng ta có thể mở rộng thành các loại xe thể thao, cao cấp. Cấu trúc như sau:

1. Component interface
package com.journaldev.design.decorator; public interface Car { public void assemble(); }
2. Component implementation
package com.journaldev.design.decorator; public class BasicCar implements Car { @Override public void assemble() { System.out.print("Basic Car."); } }
3. Decorator
package com.journaldev.design.decorator; public class CarDecorator implements Car { protected Car car; public CarDecorator(Car c){ this.car=c; } @Override public void assemble() { this.car.assemble(); } }
4. Concrete Decorator
package com.journaldev.design.decorator; public class SportsCar extends CarDecorator { public SportsCar(Car c) { super(c); } @Override public void assemble(){ super.assemble(); System.out.print(" Adding features of Sports Car."); } }
package com.journaldev.design.decorator; public class LuxuryCar extends CarDecorator { public LuxuryCar(Car c) { super(c); } @Override public void assemble(){ super.assemble(); System.out.print(" Adding features of Luxury Car."); } }

5. Chương trình sử dụng
package com.journaldev.design.test; import com.journaldev.design.decorator.BasicCar; import com.journaldev.design.decorator.Car; import com.journaldev.design.decorator.LuxuryCar; import com.journaldev.design.decorator.SportsCar; public class DecoratorPatternTest { public static void main(String[] args) { Car sportsCar = new SportsCar(new BasicCar()); sportsCar.assemble(); System.out.println("\n*****"); Car sportsLuxuryCar = new SportsCar(new LuxuryCar(new BasicCar())); sportsLuxuryCar.assemble(); } }Kết quả hiển thị
Basic Car. Adding features of Sports Car. ***** Basic Car. Adding features of Luxury Car. Adding features of Sports Car.
No comments :
Post a Comment