让我们用装饰器设计模式来征服
装饰器属于非常有用的结构设计模式。
结构设计模式解释了如何将对象和类组装成更大的结构,同时保持这些结构的灵活性和效率。 所以,装饰器是我们可以做到这一点的方法之一。
装饰器模式允许我们在不改变其结构的情况下向现有对象添加新功能。 简单地说,它允许对对象进行运行时修改。
让我们用一个例子来讨论。
我们将组装一辆具有豪华模式、运动模式和油漆等功能的汽车。 因此,我们基本上在这个设置中创建了一辆真正的汽车,甚至是一辆玩具车。 我们只需要添加功能。 如果我们使用一个简单的 UML 图来设计它,它会是这样的。
让我们看看代码!
CAR 界面:
public interface Car {
void assemble();
}
两种 car 类型(具体组件):
public class RealCar implements Car {
@Override
public void assemble() {
System.out.print("Real Car");
}
}public class ToyCar implements Car {
@Override
public void assemble() {
System.out.print("Toy Car");
}
}
现在我们要创建抽象装饰器
public abstract class CarDecorator implements Car {
private final Car car;
public CarDecorator(Car c) {
this.car = c;
}
@Override
public void assemble() {
this.car.assemble();
}
}
这是装饰基地。 现在我们需要装饰汽车的功能! 让我们也创建那些混凝土装饰器......
Luxury Decorator
public class LuxuryDecorator extends CarDecorator {
public LuxuryDecorator(Car c) {
super(c);
}
@Override
public void assemble() {
super.assemble();
System.out.print(" with Luxury interior");
}
}
SportsDecorator
public class SportsDecorator extends CarDecorator {
public SportsDecorator(Car c) {
super(c);
}
@Override
public void assemble(){
super.assemble();
System.out.print(" with Sports mode");
}
}
PaintDecorator
public class PaintDecorator extends CarDecorator{
public PaintDecorator(Car c) {
super(c);
}
@Override
public void assemble(){
super.assemble();
System.out.print(" with Painted skin");
}
}
好的! 现在我们可以走了。 因此,让我们看看如何在不改变现有结构的情况下制造不同类型的汽车。
客户端代码将是这样的。
// basic real car
Car realCar = new RealCar();
realCar.assemble();
System.out.println("\n*****");// real sports car
Car sportsCar = new SportsDecorator(new RealCar());
sportsCar.assemble();
System.out.println("\n*****");// real sports car with luxury interior
Car sportsLuxuryCar = new SportsDecorator(new LuxuryDecorator(new RealCar()));
sportsLuxuryCar.assemble();
System.out.println("\n*****");// real painted car with luxury interior and sports mode
Car sportsLuxuryPaintedCar = new SportsDecorator(new LuxuryDecorator(new PaintDecorator(new RealCar())));
sportsLuxuryPaintedCar.assemble();
System.out.println("\n*****");// real painted luxury car
Car luxuryPaintedCar = new LuxuryDecorator(new PaintDecorator(new RealCar()));
luxuryPaintedCar.assemble();
System.out.println("\n*****");// painted toy car
Car paintedToyCar = new PaintDecorator(new ToyCar());
paintedToyCar.assemble();
System.out.println("\n*****");
结果会是这样的……
看看我们如何制造汽车! 我们可以随心所欲地定制汽车……从代码逻辑的角度来看,这是非常可重用和可维护的。
我想到了同样的现实生活中的例子……这就是我们订购披萨的方式! 想想吧! 我们可以点双份鸡肉比萨/thanduri 比萨/薄皮比萨等……同时我们要求比萨人添加更多的 chesse 或 baken 或任何配料,这是他们提供的增值服务。 所以,我们也可以按照这种设计模式创建自己的比萨工厂……
这简直就是装饰者模式! 希望你明白我在这里解释的想法。 在你的代码设计过程中尝试使用这种模式。 如您所知,设计总是很重要!