Modeli i dizajnit të dekoruesit në Java Shembull
Model i dizajnit të dekoratorit përdoret për të modifikuar funksionalitetin e një objekti në kohën e ekzekutimit. Në të njëjtën kohë, rastet e tjera të së njëjtës klasë nuk do të ndikohen nga kjo, kështu që objekti individual merr sjelljen e modifikuar. Modeli i dizajnit të dekoratorit është një nga modelet e dizajnit strukturor (të tilla si kompozimi për të zbatuar.
Modeli i dizajnit të dekoruesit
-
Component Interface - The interface or abstract class defining the methods that will be implemented. In our case
Car
will be the component interface.package com.journaldev.design.decorator; public interface Car { public void assemble(); }
-
Component Implementation - The basic implementation of the component interface. We can have
BasicCar
class as our component implementation.package com.journaldev.design.decorator; public class BasicCar implements Car { @Override public void assemble() { System.out.print("Basic Car."); } }
-
Decorator - Decorator class implements the component interface and it has a HAS-A relationship with the component interface. The component variable should be accessible to the child decorator classes, so we will make this variable protected.
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(); } }
-
Concrete Decorators - Extending the base decorator functionality and modifying the component behavior accordingly. We can have concrete decorator classes as
LuxuryCar
andSportsCar
.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."); } }
Modeli i dizajnit të dekoruesit - Diagrami i klasës
Program testimi i modelit të dizajnit të dekoratorit
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();
}
}
Vini re se programi i klientit mund të krijojë lloje të ndryshme të Objekteve në kohën e ekzekutimit dhe ata gjithashtu mund të specifikojnë rendin e ekzekutimit. Rezultati i programit të testimit të mësipërm është:
Basic Car. Adding features of Sports Car.
*****
Basic Car. Adding features of Luxury Car. Adding features of Sports Car.
Modeli i dizajnit të dekoruesit - Pika të rëndësishme
- Modeli i dizajnit të dekoruesit është i dobishëm në ofrimin e aftësive të modifikimit të kohës së ekzekutimit dhe për rrjedhojë më fleksibël. Është e lehtë për tu mirëmbajtur dhe zgjatur kur numri i zgjedhjeve është më i madh.
- Dizavantazhi i modelit të dizajnit të dekoruesit është se ai përdor shumë objekte të ngjashme (dekoratorë).
- Modeli i dekoruesit përdoret shumë në FileReader, BufferedReader etj.