计算机网络技术电商网站建设与运营方向,自建网站模板代码,在线服装设计网站,九幺seo工具目录 一、简介二、装饰器模式2.1、组件信息2.2、具体组件信息2.3、颜色装饰器抽象类2.4、颜色装饰器实现类 三、使用3.1、测试3.2、优缺点 一、简介 装饰器模式是一种结构型设计模式#xff0c;它允许向现有对象动态地添加新功能#xff0c;同时又不改变其结构。它通过创建包… 目录 一、简介二、装饰器模式2.1、组件信息2.2、具体组件信息2.3、颜色装饰器抽象类2.4、颜色装饰器实现类 三、使用3.1、测试3.2、优缺点 一、简介 装饰器模式是一种结构型设计模式它允许向现有对象动态地添加新功能同时又不改变其结构。它通过创建包装对象来包裹原始类在不改变其接口的情况下为对象添加新的行为或责任。
装饰器模式通常包含以下角色 Component组件 定义了一个对象接口可以动态地添加新的功能。 ConcreteComponent具体组件 实现了组件接口是被装饰的类。 Decorator装饰器抽象类 实现了组件接口并持有一个对组件对象的引用在其内部包装组件对象可以动态地为组件添加新的功能。 ConcreteDecorator具体装饰器类 继承自装饰器抽象类具体实现了装饰功能可以添加具体的行为。
二、装饰器模式
2.1、组件信息 假设我们有一个形状的接口它有一个画形状的方法
public interface Shape {// 画一个形状void draw();
}2.2、具体组件信息 圆形组件和方形组件实现了上面的接口代码如下
// 具体的形状类 - 圆形
public class Circle implements Shape {public void draw() {System.out.println(画了一个圆形Circle);}
}// 具体的形状类 - 方形
public class Square implements Shape {public void draw() {System.out.println(画了一个方形Square);}
}2.3、颜色装饰器抽象类
// 装饰器抽象类
abstract class ColorDecorator implements Shape {protected Shape decoratedShape;protected String color;public ColorDecorator(Shape decoratedShape, String color) {this.decoratedShape decoratedShape;this.color color;}public void draw() {decoratedShape.draw();System.out.println(装饰一个颜色: color);}
}2.4、颜色装饰器实现类
// 圆形颜色装饰器
public class CircleColorDecorator extends ColorDecorator {public CircleColorDecorator(Shape decoratedShape, String color) {super(decoratedShape, color);}
}// 方形颜色装饰器
public class SquareColorDecorator extends ColorDecorator {public SquareColorDecorator(Shape decoratedShape, String color) {super(decoratedShape, color);}
}三、使用
3.1、测试
public class DecoratorPatternExample {public static void main(String[] args) {System.out.println(---------------------基础形状-------------------------);// 创建基础圆形Shape circle new Circle();circle.draw();// 创建基础方形Shape square new Square();square.draw();System.out.println(---------------------圆形形状带颜色-------------------------);// 装饰成红色的圆形Shape redCircle new CircleColorDecorator(new Circle(),red);redCircle.draw();// 装饰成蓝色的圆形Shape blueCircle new CircleColorDecorator(new Circle(),blue);blueCircle.draw();System.out.println(---------------------方形形状带颜色-------------------------);// 装饰成红色的圆形Shape redSquare new SquareColorDecorator(new Square(),red);redSquare.draw();// 装饰成蓝色的方形Shape blueSquare new SquareColorDecorator(new Square(),blue);blueSquare.draw();}
}运行结果
---------------------基础形状-------------------------
画了一个圆形Circle
画了一个方形Square
---------------------圆形形状带颜色-------------------------
画了一个圆形Circle
装饰一个颜色: red
画了一个圆形Circle
装饰一个颜色: blue
---------------------方形形状带颜色-------------------------
画了一个方形Square
装饰一个颜色: red
画了一个方形Square
装饰一个颜色: blue3.2、优缺点 优点 动态性 可以动态地添加或移除对象的功能不需要修改已有代码。 灵活性 可以通过不同的装饰器组合来实现不同的效果使得扩展变得更加灵活。 遵循开闭原则 装饰器模式允许在不修改现有代码的情况下扩展对象的功能符合开闭原则。 缺点 过多的对象 可能会导致系统中出现大量的具体装饰器类增加了对象数量使得代码复杂性增加。 固定装饰层次 当装饰器层次固定时对于动态地添加新功能有一定的限制因为需要预先定义好不同的装饰器组合。 总的来说装饰器模式是一种灵活且可扩展的模式它允许在运行时动态地添加新功能而无需改变现有对象的结构这使得代码更具灵活性和可维护性。