装饰者模式:动态地将责任附加到对象上,若要扩展对象,装饰者模式提供了比继承更弹性的替代方案
要点:装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为
装饰者包含一个超类的对象,这样,可以在被装饰者行为前或者行为后加上新的行为,甚至取代原有的行为
装饰者会使程序中出现很多小类,增加使用难度
使用场景:对象由主体+许多可选的部件或者功能构成,使用继承或者接口会产生很多类,且很难扩展。例如,现在需要一个汉堡,主体是鸡腿堡,可以选择添加生菜、酱、辣椒等等许多其他的配料,这种情况下就可以使用装饰者模式。
实例:
-
汉堡基类
- package decorator;
- public abstract class Humburger {
- protected String name ;
- public String getName(){
- return name;
- }
- public abstract double getPrice();
- }
- 鸡腿堡类
- package decorator;
- public class ChickenBurger extends Humburger {
- public ChickenBurger(){
- name = "鸡腿堡";
- }
- @Override
- public double getPrice() {
- return 10;
- }
- }
- 配料的基类
- package decorator;
- public abstract class Condiment extends Humburger {
- public abstract String getName();
- }
- 生菜
- package decorator;
- public class Lettuce extends Condiment {
- Humburger humburger;
- public Lettuce(Humburger humburger){
- this.humburger = humburger;
- }
- @Override
- public String getName() {
- return humburger.getName()+" 加生菜";
- }
- @Override
- public double getPrice() {
- return humburger.getPrice()+1.5;
- }
- }
- 辣椒
- package decorator;
- public class Chilli extends Condiment {
- Humburger humburger;
- public Chilli(Humburger humburger){
- this.humburger = humburger;
- }
- @Override
- public String getName() {
- return humburger.getName()+" 加辣椒";
- }
- @Override
- public double getPrice() {
- return humburger.getPrice(); //辣椒是免费的哦
- }
- }
- 测试
- package decorator;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Humburger humburger = new ChickenBurger();
- System.out.println(humburger.getName()+" 价钱:"+humburger.getPrice());
- Lettuce lettuce = new Lettuce(humburger);
- System.out.println(lettuce.getName()+" 价钱:"+lettuce.getPrice());
- Chilli chilli = new Chilli(humburger);
- System.out.println(chilli.getName()+" 价钱:"+chilli.getPrice());
- Chilli chilli2 = new Chilli(lettuce);
- System.out.println(chilli2.getName()+" 价钱:"+chilli2.getPrice());
- }
- }
- 输出
- 鸡腿堡 价钱:10.0
- 鸡腿堡 加生菜 价钱:11.5
- 鸡腿堡 加辣椒 价钱:10.0
- 鸡腿堡 加生菜 加辣椒 价钱:11.5
java.io便是使用了装饰者模式
相关推荐
装饰者模式(Decorator)是一种设计模式,用于在运行时动态地给对象添加额外的责任或功能。它是结构型设计模式的一种,能将行为的增加与对象的创建分离,使得我们可以独立地扩展对象的功能。 在Java或其他面向对象...
装饰模式通常涉及到四个主要角色:Component(组件)、ConcreteComponent(具体组件)、Decorator(装饰者)和ConcreteDecorator(具体装饰者)。 1. Component(组件):定义一个对象接口,所有被装饰的对象以及...
装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,...
装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...
装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。在PHP中,装饰者模式尤其有用,因为它提供了灵活性,可以在不改变类原有结构的情况下扩展其功能。下面我们将...
“就增加功能来说,Decorator 模式相比生成子类更为灵活” 这句话的含义是,组合比继承更灵活,当可拓展的功能很多时,继承方案会产生大量的子类,而组合可以提
装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...
装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许我们向对象添加新的行为或职责,而无需修改对象的原始代码。在C++中实现装饰者模式,可以让我们灵活地扩展对象的功能,同时保持代码的可读性和可维护性...
装饰者模式是面向对象设计中的一种结构型模式,它的主要目的是动态地给一个对象添加一些额外的职责,即增加功能,同时又不破坏原有的结构。装饰者模式是一种比继承更灵活的扩展对象行为的方式,它避免了类爆炸问题,...
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
Decorator 是 ES6 中的一种设计模式,顾名思义,它是一种装饰器模式。Decorator 的本质是一个普通的函数,用于扩展类属性和类方法。它可以在不改变原有代码的情况下,对原来功能进行扩展。 Decorator 的优点有两个...
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时给对象添加新的行为或职责,同时保持对象的接口不变。这种模式的核心在于,它动态地将责任附加到对象上,通过将对象包装在一个装饰类中来扩展...
- **ConcreteComponent(具体组件)**:实现了Component接口的类,是装饰模式要装饰的目标对象。它定义了初始行为,不包含任何额外装饰。 - **Decorator(装饰者)**:持有对Component对象的引用,并且实现...
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式通过创建一个装饰类,该类包装了原始类的实例,并在调用原始类方法之前或之后添加额外的...
滥用装饰器模式 安装 如果您有风险,请继续使用此功能。 你是大人 npm install --save react-global-event-decorator 这个是来做什么的? 当您单击DOM中的任意位置时,曾经有一个React组件需要执行操作吗? 它...
在提供的内容中,可以看到具体实现了装饰器模式的类和方法,例如使用BufferedInputStream来包装FileInputStream以实现缓冲功能,还有通过Decorator类的示例来展示装饰器模式的结构,其中Decorator作为具体装饰类实现...
让我们先从Python开始,通过`Decorator.py`文件中的示例来理解装饰模式。 在Python中,装饰器是一种特殊类型的函数,可以用来修改其他函数的功能或行为。装饰器函数接收一个函数作为参数,并返回一个新的函数。以下...