您的位置:首页 > 科技 > IT业 > 设计模式-装饰器模式

设计模式-装饰器模式

2024/11/15 17:45:56 来源:https://blog.csdn.net/dfdg345/article/details/140715430  浏览:    关键词:设计模式-装饰器模式

目录

🤞1.了解装饰器模式

🚍2.装饰器的各个组件

🍳3.案例实操

🍟4.测试

🤶5.优缺点

1.了解装饰器模式

  • 也叫包装设计模式,属于结构型模式
  • 它是作为现有的类的一个包装,允许向一个现有的对象添加新的功能,同时又不改变其结构
  • 给对象增加功能,一般两种方式继承或关联组合
  • 将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为来增强功能,这个就是装饰器模式

2.装饰器的各个组件

  • 抽象组件(Component):定义装饰方法的规范
  • 被装饰者(ConcreteComponent):Component的具体实现,就是要装饰的具体对象
  • 装饰者组件(Decorator):定义具体装饰者的行为规范,和Component角色有相同的接口,持有组件(Component)对象的实例引用
  • 具体装饰物(ConcreteDecorator): 负责给构件对象装饰附加的功能

3.案例实操

  • 抽象组件

//抽象组件
public interface Bike {//描述String getDesc();//价格int getPrice();
}
  • 被装饰者

//具体的被装饰者1
public class BigBike implements Bike{private String desc="大号自行车";@Overridepublic String getDesc() {return desc;}@Overridepublic int getPrice() {return 200;}
}//具体的被装饰者2
public class SmallBike implements Bike{private String desc="小号自行车";@Overridepublic String getDesc() {return desc;}@Overridepublic int getPrice() {return 100;}
}
  • 装饰器

//装饰器
public class BikeDecorator implements Bike{private String desc="装饰器";@Overridepublic String getDesc() {return null;}@Overridepublic int getPrice() {return 0;}
}
  • 具体的装饰器
//具体的装饰器1
public class RSCBikeDecorator extends BikeDecorator {private String desc = "增加一个防爆胎";//以构造器的形式传入被装饰者private Bike bike;public RSCBikeDecorator(Bike bike) {this.bike = bike;}@Overridepublic String getDesc() {return bike.getDesc() + "," + desc;}@Overridepublic int getPrice() {return bike.getPrice() + 100;}
}//具体的装饰器2
public class SunNaBIkeDecorator extends BikeDecorator{private String desc="增加一个喇叭";//以构造器的形式传入被装饰者private Bike bike;public SunNaBIkeDecorator(Bike bike) {this.bike = bike;}@Overridepublic String getDesc() {return bike.getDesc()+","+desc;}@Overridepublic int getPrice() {return bike.getPrice()+100;}
}

4.测试

public class Main {public static void main(String[] args) {Bike bigBike = new BigBike();bigBike = new RSCBikeDecorator(bigBike);bigBike = new SunNaBIkeDecorator(bigBike);bigBike = new SunNaBIkeDecorator(bigBike);System.out.println(bigBike.getDesc()+","+bigBike.getPrice());}
}

5.优缺点

  • 优点:
    • 装饰模式与继承关系的目的都是要扩展对象的功能,但装饰模式可以提供比继承更多的灵活性。
    • 使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合,原有代码无须改变,
  • 缺点:
    • ​​​​​​​装饰模式增加了许多子类,如果过度使用会使程序变得很复杂(多层包装)
    • 增加系统的复杂度,加大学习与理解的难度

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com