`
570421779
  • 浏览: 46373 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

设计模式之装饰者模式

    博客分类:
  • java
阅读更多
先来看一个例子:
如果我们读取文件内容往往都会使用
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("c:\\a.txt"));

上大学的时候老师告诉我们这个叫流,在FileInputStream上面又套了一个更大的管道,其实这是使用了装饰者模式,在不改变底层代码的情况下,给对象赋予新的功能。
现在通过一个实例来展示装饰者模式,我们知道coca-cola有多种饮品,比如CocaCola和Sprite,它们的包装又分为大瓶、中瓶、小瓶,使用装饰者模式就可以快速的知道拿在手上的饮品的种类和价格。
public abstract class Drinking {
	String description = "unknow";
	public String getDescription(){
		return description;
	}
	public abstract double cost();
}

public class CocaCola extends Drinking{
	
	
	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 1.0;
	}

	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return "Coca-Cola";
	}
}

public class Sprite extends Drinking{

	
	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 1.0;
	}

	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return "Sprite";
	}
}

public class BigBottle extends Drinking{

	Drinking btl;
	public BigBottle(Drinking btl){
		this.btl = btl;
		description = "this is a big bottle";
	}
	@Override
	public double cost() {
		return 1.5 + btl.cost();
	}
	
	public String getDescription(){
		return btl.getDescription()+description;
	}
}


public class MiddleBottle extends Drinking{

	Drinking btl;
	public MiddleBottle(Drinking btl){
		this.btl = btl;
		description = "this is a middle bottle";
	}
	@Override
	public double cost() {
		return 1.5 + btl.cost();
	}
	
	public String getDescription(){
		return btl.getDescription()+description;
	}
}

public class NormalBottle extends Drinking{

	Drinking btl;
	public NormalBottle(Drinking btl){
		this.btl = btl;
		description = "this is a normal bottle";
	}
	@Override
	public double cost() {
		return 1.5 + btl.cost();
	}
	
	public String getDescription(){
		return btl.getDescription()+description;
	}
}

public class TestMain {
	public static void main(String[] args){
		Drinking coca = new CocaCola();
		coca = new BigBottle(coca);
		System.out.println(coca.getDescription());
		System.out.println(coca.cost());
	}
}
分享到:
评论

相关推荐

    Qt设计模式之装饰者模式

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

    设计模式之装饰者模式,内含可运行代码

    总的来说,装饰者模式是一种强大的设计模式,它提供了一种在运行时动态调整对象行为的方法,使得代码更具灵活性和可扩展性。通过理解和熟练运用装饰者模式,我们可以更好地应对软件需求的变化,提高代码的可维护性和...

    java设计模式之装饰者模式代码

    装饰者模式是面向对象设计模式的一种,主要用于动态地给一个对象添加一些额外的职责,而不会改变该对象的类。这种模式允许我们独立于对象的类来扩展对象的功能,为对象提供新的行为,同时保持了代码的可读性和可维护...

    设计模式之装饰者模式-极客学院

    装饰者模式是面向对象设计中的一种结构型模式,它的主要目的是动态地给一个对象添加一些额外的职责,即增加功能,同时又不破坏原有的结构。装饰者模式是一种比继承更灵活的扩展对象行为的方式,它避免了类爆炸问题,...

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

    装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,...

    设计模式之装饰者模式1

    装饰者模式是一种设计模式,主要用来在不修改对象原有代码的情况下动态地扩展其功能。这种模式的核心在于,它通过创建包装对象,即装饰者,来实现对原对象功能的增强。装饰者通常与被装饰对象具有相同的接口,使得...

    设计模式--装饰者模式java例子

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...

    javascript设计模式之装饰者模式.docx

    JavaScript中的装饰者模式是一种设计模式,它允许在不修改原有对象的基础上动态地扩展对象的功能。这种模式在软件工程中尤其有用,因为它可以帮助我们保持代码的灵活性、可读性和可维护性。 装饰者模式的核心思想是...

    54-Spring设计模式之装饰器模式1

    Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...

    c# ,设计模式,装饰者模式,星巴兹咖啡

    装饰者模式是面向对象设计模式中的一个重要概念,它在C#等编程语言中广泛应用。这个例子以星巴克咖啡为例,展示了如何使用装饰者模式来灵活地扩展对象的功能,而无需修改原有代码。 装饰者模式的核心思想是动态地将...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

    设计模式-装饰者模式

    在“设计模式—装饰者模式”中,我们将深入探讨这个模式的概念、实现方式以及实际应用。 装饰者模式的核心概念在于“装饰”(Decorator)和“组件”(Component)。组件是被装饰的基本对象,它可以是接口或者抽象类...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    软件设计模式之装饰模式讲解

    软件设计模式之装饰模式讲解ppt,可用于教学课件。

    24种设计模式以及混合设计模式

    创建型设计模式关注对象的创建过程,如单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)和建造者模式(Builder)。这些模式提供了一种灵活且可扩展的方式来创建和管理对象。 结构型...

Global site tag (gtag.js) - Google Analytics