本文共 2211 字,大约阅读时间需要 7 分钟。
装饰器模式(Decorator Pattern)是一种常用的设计模式,主要用于在不修改原有类的结构的情况下,向对象动态添加新的功能。这种模式通过包装原有对象,实现对功能的扩展,使得类之间的耦合度降低,系统更加灵活和可维护。
装饰器模式的核心思想是通过创建一个装饰类,包围原有的类,向其添加新的功能。这种方式可以在不改变原有类结构的情况下,增加新的行为。装饰器模式的主要应用场景包括功能扩展、动态添加职责以及需要对现有功能进行额外处理的情况。
要实现装饰器模式,可以按照以下步骤进行:
首先,定义一个通用接口Shape
,用于规范所有图形的基本行为。
public interface Shape { void draw();}
接下来,实现接口Shape
的具体类,如Rectangle
和Circle
。
public class Rectangle implements Shape { @Override public void draw() { System.out.println("Shape: Rectangle"); }}
public class Circle implements Shape { @Override public void draw() { System.out.println("Shape: Circle"); }}
然后,创建一个抽象装饰类ShapeDecorator
,继承Shape
接口,并包含一个引用用于装饰的目标对象。
public abstract class ShapeDecorator implements Shape { protected Shape decoratedShape; public ShapeDecorator(Shape decoratedShape) { this.decoratedShape = decoratedShape; } public void draw() { decoratedShape.draw(); }}
基于ShapeDecorator
,创建具体的装饰类,如RedShapeDecorator
,实现额外的功能。
public class RedShapeDecorator extends ShapeDecorator { public RedShapeDecorator(Shape decoratedShape) { super(decoratedShape); } @Override public void draw() { decoratedShape.draw(); setRedBorder(decoratedShape); } private void setRedBorder(Shape decoratedShape) { System.out.println("Border Color: Red"); }}
最后,使用RedShapeDecorator
来装饰具体的图形对象。
public class DecoratorPatternDemo { public static void main(String[] args) { Shape circle = new Circle(); Shape redCircle = new RedShapeDecorator(circle); Shape rectangle = new Rectangle(); Shape redRectangle = new RedShapeDecorator(rectangle); System.out.println("Circle with normal border"); circle.draw(); System.out.println("\nCircle of red border"); redCircle.draw(); System.out.println("\nRectangle of red border"); redRectangle.draw(); }}
通过以上步骤,可以清晰地看到装饰器模式的应用场景和实现方式。这种模式在软件设计中广泛应用,能够有效提升系统的灵活性和可维护性。
转载地址:http://nfes.baihongyu.com/