设计模式-装饰器模式

        装饰器模式(Decorator Pattern)是一种设计模式,它允许在运行时动态地给一个对象添加额外的功能,而不需要修改原始对象的结构。

        在Java中,装饰器模式可以通过以下方式实现:

        1. 创建一个接口(Component),定义了原始对象和装饰器对象的共同行为。

        2. 创建一个具体的实现类(ConcreteComponent),实现了接口,并提供了原始对象的具体实现。

        3. 创建一个装饰器类(Decorator),实现了接口,并包含一个对Component对象的引用。装饰器类可以在调用原始对象的方法之前或之后添加额外的功能。

        4. 创建具体的装饰器类(具体的Decorator类),继承自装饰器类,并在调用原始对象的方法之前或之后添加特定的功能。

        以下是一个简单的示例代码,演示了如何使用装饰器模式:

// 接口
interface Shape {
	void draw();
}

// 具体实现类
class Circle implements Shape {
	@Override
	public void draw() {
		System.out.println("Drawing a circle");
	}
}

// 装饰器类
abstract class ShapeDecorator implements Shape {
	protected Shape decoratedShape;

	public ShapeDecorator(Shape decoratedShape) {
		this.decoratedShape = decoratedShape;
	}

	@Override
	public void draw() {
		decoratedShape.draw();
	}
}

// 具体的装饰器类
class RedShapeDecorator extends ShapeDecorator {
	public RedShapeDecorator(Shape decoratedShape) {
		super(decoratedShape);
	}

	@Override
	public void draw() {
		decoratedShape.draw();
		setRedBorder();
	}

	private void setRedBorder() {
		System.out.println("Setting red border");
	}
}

// 客户端
public class Main {
	public static void main(String[] args) {
		Shape circle = new Circle();
		Shape redCircle = new RedShapeDecorator(new Circle());

		circle.draw();
		System.out.println("---");
		redCircle.draw();
	}
}

        在这个示例中,Shape接口定义了原始对象和装饰器对象的共同行为。Circle类是具体的实现类,实现了Shape接口,并提供了原始对象的具体实现。

        ShapeDecorator类是装饰器类,实现了Shape接口,并包含一个对Component对象的引用。在draw方法中,装饰器类调用原始对象的draw方法。

        RedShapeDecorator类是具体的装饰器类,继承自装饰器类,并在调用原始对象的draw方法之前或之后添加特定的功能。在这个示例中,RedShapeDecorator类在调用原始对象的draw方法之后,添加了设置红色边框的功能。

        在客户端中,通过实例化具体的装饰器类来使用装饰器模式。客户端可以选择性地添加多个装饰器,以实现不同的功能组合。

        装饰器模式允许在运行时动态地给一个对象添加额外的功能,而不需要修改原始对象的结构。这提供了更大的灵活性和可扩展性,同时遵循了开闭原则。

你可能感兴趣的:(设计模式,设计模式,装饰器模式,java)