`

设计模式:装饰者模式(Decorator Pattern)

阅读更多

装饰者模式定义:动态地将责任附加到对象上,如要扩展功能,装饰者提供了比继承更有弹性的替代方案。

在java的io中用的比较多

这里我们以蛋糕为例:

一、我们新建一个Cake接口

 

package com.kaishengit.decorator;

public interface Cake {
	public float cost();
}

 

二、新建一个蛋糕类(实现Cake接口)和一个装饰接口(继承Cake接口)

1>蛋糕类:

 

package com.kaishengit.decorator;

public class MilkCake implements Cake{

	@Override
	public float cost() {
		return 100f;
	}

}
 

 

2>装饰接口:

 

package com.kaishengit.decorator;

public interface CakeDecorator extends Cake{
	
}

 

 三、新建两个装饰类,实现装饰接口

1>加草莓

 

package com.kaishengit.decorator;

public class Berry implements CakeDecorator{
	private Cake cake;
	public Berry(Cake cake){
		this.cake = cake;
	}

	@Override
	public float cost() {
		float berryPrice = 5f;
		return cake.cost() + berryPrice;
	}
}

 

 2>加巧克力

 

package com.kaishengit.decorator;

public class Chocolate implements CakeDecorator{
	private Cake cake;
	public Chocolate(Cake cake){
		this.cake = cake;
	}
	@Override
	public float cost() {
		float chocolatePrice = 20f;
		return cake.cost() + chocolatePrice;
	}

}

 

 四、测试

 

package com.kaishengit.decorator;

public class Test {
	public static void main(String[] args) {
		//牛奶蛋糕
		MilkCake mc = new MilkCake();
		
		//草莓牛奶蛋糕
		Berry b = new Berry(mc);
		System.out.println("付款:" + b.cost());
		
		//草莓巧克力牛奶蛋糕
		Chocolate c = new Chocolate(b);
		System.out.println("付款:" + c.cost());
	}
}

 

 运行结果:

 

付款:105.0

付款:125.0




装饰者模式特点:
1>继承属于扩展形式之一,但并不见得是弹性最好的最佳方式
2>在我们的设计中,应该允许行为可以被扩展,而无需修改现有的代码(开闭原则)
3>除了继承,使用装饰者模式也可以让我们扩展行为
4>装饰者可以在被装饰者的行为前面、后面加上自己的行为,甚至可以将被装饰者的行为取代,而达到特定的目的
5>装饰者模式会导致设计中出现许多小对象,如果过度使用,会让程序变得复杂

ok...

 

分享到:
评论

相关推荐

    设计模式之装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...

    [结构型模式] head first 设计模式之装饰者模式(decorator)

    装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许动态地给一个对象添加新的功能,而无需修改其原有代码。这个模式的核心思想是通过将对象封装在一个包装器(Decorator)中来扩展其行为,而包装器和原始...

    装饰者模式(Decorator Pattern)原理图

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...

    Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许我们向对象添加新的行为或职责,而无需修改对象的原始代码。在C++中实现装饰者模式,可以让我们灵活地扩展对象的功能,同时保持代码的可读性和可维护性...

    设计模式:可复用面向对象软件的基础--详细书签版

    整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法可以作为后来者的榜样。如果要知道怎样恰当定义和描述设计模式,我们应该可以从他们那儿获得启发”--steve...

    c++-设计模式之装饰模式(Decorator)

    装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...

    C#设计模式之Decorator 装饰模式

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...

    Qt设计模式之装饰者模式

    装饰者模式(Decorator Pattern)是软件设计模式中的结构型模式之一,它允许在运行时动态地给一个对象添加新的行为或职责,而无需修改对象本身。在Qt库中,装饰者模式也被广泛应用,尤其在实现用户界面组件的扩展和...

    设计模式的装饰者模式的例子

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有的代码。这种模式遵循开闭原则,即对扩展开放,对修改关闭,使得我们可以在不改变对象原有结构的情况下,通过...

    设计模式PPT

     装饰者模式(Decorator Pattern)  外观模式(Facade Pattern)  享元模式(Flyweight Pattern)  代理模式(Proxy Pattern) 行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种...

    设计模式—装饰者模式

    装饰者模式(Decorator Pattern)是软件工程中一种用于动态地给一个对象添加额外职责的设计模式。它属于结构型模式,可以让我们在不改变对象自身的基础上,在运行时为对象添加新的功能,即“装饰”对象。这使得我们...

    .NET设计模式(10):装饰模式(DecoratorPattern)

    在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式...[GOF《设计模式》]图1Decorator模式结构图装饰模式动态地给一个对象添加额外的职责。不论一幅画有没有画

    c++设计模式全系列+应用场景+实例说明

    4. **装饰者模式(Decorator Pattern)**:装饰者模式是一种结构设计模式,允许向一个对象动态添加新功能,而无需修改其源代码。 5. **策略模式(Strategy Pattern)**:策略模式是一种行为设计模式,定义了一系列...

    JavaScript设计模式.pdf

    4. 装饰者模式(Decorator Pattern): 装饰者模式是动态地给一个对象添加一些额外的职责。它的主要作用是使对象可以在不改变其外部接口的情况下增加新的职责。 5. 组合模式(Composite Pattern): 组合模式是将...

    设计模式 t07Decorator

    在给定的“设计模式 t07Decorator”主题中,我们聚焦于装饰者模式(Decorator Pattern)。装饰者模式是一种结构型设计模式,它允许我们在运行时给对象添加新的行为或职责,而无需修改其原有代码。这种模式遵循开闭...

    PHP设计模式(八)装饰器模式Decorator实例详解【结构型】

    装饰器模式(Decorator Pattern)是一种结构型设计模式,主要用于在运行时动态地给对象添加新的职责或行为,而不必改变现有对象的类定义。在面向对象编程中,装饰器模式提供了一种相对于继承更加灵活的方式来增强或...

    设计模式装饰者模式

    装饰者模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时动态地给对象添加新的职责或行为,而无需修改原有代码。这种模式的核心思想是将装饰功能和对象本身分离,使得装饰过程可以独立进行,...

Global site tag (gtag.js) - Google Analytics