`

装饰模式与继承的区别

阅读更多

刚好看了毕老师的一个视频 关于装饰设计模式 觉得挺精辟的就保留了下来

什么是装饰设计模式:

当想要对已有的对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。

装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。

 

 

如一个简单的demo 人吃饭,刚开始人穷只是普通的吃饭后来人生活好了吃饭就不一样了增强了吃饭的功能  虽然例子不是恰当 能说明问题就行

看代码:

 

//穷的时候吃饭简简单单的吃饭
class Person
{
	public void chiFan(){
	
		System.out.println("吃饭");
	}
}

//富裕后吃饭 吃饭前来杯酒吃饭后来根烟 但是这中间的过程还是有吃饭
class SuperPerson
{
	private Person p;
	public SuperPerson(Person p){
	
		this.p=p;
	}

	public void superChiFan(){
		//吃饭前来杯开胃酒增加食量
		System.out.println("开胃酒");
		p.chiFan();
		//吃完饭后来根烟
		System.out.println("来根烟");
	}

}
public class PersonDemo
{	public static void main(String args[]){
	Person p=new Person();

	SuperPerson sp= new SuperPerson(p);

	sp.superChiFan();
	}
}

 

 

 

以上只是简单说明一下,在JAVA IO中用了很多增强 如:FileRead中read()方法 只是一个一个字节去读,为了读得更快在BufferedReader就增强了read()方法而产生了reandLine()一行一行的去读

 

 

 

 

有人说没必要那么麻烦:你只要拿superPerson继承person 在覆写person的chiFan()方法不就行了?

装饰是构造函数参数传递进行增强

如果为了某个功能而产生子类(继承)那么那个体系是非常臃肿的

 

例如:你有个对象有个功能 是在N年前建立的,如今你觉得功能不够用了 写个类把对象传进来就可以解决问题了 如果这个功能写错了 我就把自己写的功能去掉又不影响以前的功能灵活性相当强的。

 

装饰模式比继承要灵活。避免了继承体系臃肿。
而且降低了类于类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰类通常是都属于一个体系中的。

 

 

 

 

 

分享到:
评论

相关推荐

    设计模式之装饰模式

    在C#中,装饰模式是通过创建一个包装类(Decorator),该包装类实现了与被装饰对象相同的接口,并持有被装饰对象的引用,从而在不改变原有对象的基础上增加功能。 在C#中,装饰模式通常涉及到以下几个关键组件: 1....

    装饰模式代码示例

    5. **与继承的对比**:装饰模式比继承更具有灵活性,因为装饰类可以独立于基础类存在,而且可以添加多个装饰,形成装饰链。 6. **实际应用**:装饰模式在很多场景下都非常有用,如日志记录、性能监控、权限控制等。...

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

    在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。下面将详细讲解装饰者模式的核心概念、工作原理以及如何在Java中应用。 ### 一、装饰者模式的基本概念 1. **...

    JAVA设计模式之装饰模式代码

    在Java中,装饰模式通常通过继承和组合来实现,提供了比子类化更灵活的方式来扩展对象的功能。 装饰模式的核心概念包括以下几个部分: 1. 抽象组件(Component):定义一个接口,所有目标对象和装饰对象都要实现这...

    开发模式之装饰模式

    ### 开发模式之装饰模式详解 #### 装饰模式定义 装饰模式(Decorator Pattern)是一种结构型设计模式,允许向对象动态地添加新的功能,而无需修改其原有结构。这种模式通过创建一个新的包装类来包裹真实的对象,...

    设计模式 - 装饰模式(C++实例)

    在C++中,装饰模式通常涉及到继承和组合。它通过创建一个包装器对象,该对象包含对原始对象(也称为组件)的引用,并扩展其行为。装饰类通常具有与被装饰类相同的接口,这样客户端代码可以透明地处理装饰对象和原始...

    装饰模式——装饰模式.doc

    装饰模式是一种设计模式,属于结构型模式,其主要目的是在不改变对象本身的基础上,通过向对象添加新的行为或属性来扩展其功能。这种模式遵循“开闭原则”,即对扩展开放,对修改关闭。 在装饰模式中,有四个关键...

    用装饰模式装饰HttpServletRequest对象

    不同于传统的继承,装饰模式允许在不改变原始对象(如HttpServletRequest)的基础上增加新功能。它创建一个包装对象,即装饰者,该装饰者与原始对象实现相同的接口,可以访问并扩展原始对象的行为。在Servlet环境中...

    装饰者模式——Decorator

    3. 装饰者模式与继承的区别和优势。 4. 装饰者模式在实际项目中的应用场景和案例分析。 5. 如何在Java或其他编程语言中使用装饰者模式进行代码重构,提高代码的可扩展性。 6. 可能还会讨论到装饰者模式的一些潜在...

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

    在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用继承带来的类爆炸问题。 首先,我们来看一下装饰模式的基本构成。在C#中,装饰模式通常包括四个关键角色: 1. 抽象组件(Component...

    设计模式C++学习之装饰模式(Decorator)

    装饰模式的核心思想是通过将一个类包装在一个与它具有相同接口的装饰类中来实现。装饰类通常包含一个指向被装饰对象的引用,并在其内部调用被装饰对象的方法,同时可以添加新的功能或改变原有行为。这样,装饰模式...

    RPG与设计模式(一)装饰模式 的源码

    文章“RPG与设计模式(一)装饰模式的源码”可能是通过一个角色扮演游戏(RPG)的场景来解释装饰模式的应用。RPG游戏通常涉及到多种角色和装备,这些装备可以为角色增加不同的属性,如攻击力、防御力等,这正是装饰...

    装饰模式小应用

    在软件工程中,装饰模式常常用于那些需要频繁扩展功能的场景,因为通过继承来增加新功能会导致类的数量急剧增加,形成类的“爆炸性增长”。相比之下,装饰模式提供了一种更加灵活、可维护的解决方案。 装饰模式的...

    HeadFirst 设计模式学习笔记3--装饰模式 Demo

    装饰模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式通常用于保持对象的原始类结构不变,同时增强其功能。HeadFirst 设计模式系列书籍以其生动有趣的插图和...

    23种设计模式--装饰模式

    总的来说,装饰模式是一种优雅且灵活的设计模式,它避免了过多的类继承导致的类层次复杂,同时也使得代码更加可读、可维护。通过组合不同的Concrete Decorator,我们可以构建出具有丰富功能的对象,而不会对原始对象...

    [结构型模式] 装饰者模式的理解

    "装饰者模式-类图.pdf"则可能包含更详细的类图,显示了类与类之间的继承和关联关系,有助于深入学习和应用装饰者模式。 总结来说,装饰者模式是一种强大的设计工具,它允许我们在运行时动态地扩展对象的功能,同时...

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

    装饰模式(Decorator Pattern)是一...总的来说,装饰模式提供了一种灵活的扩展对象功能的方式,避免了过度使用继承导致的类膨胀问题。它允许我们在运行时根据需要自由组合对象的功能,增加了代码的可维护性和可扩展性。

    C# 装饰模式实例

    装饰模式是一种结构型设计模式,它允许我们向现有的对象添加新的功能,同时又不破坏其原有的结构。在C#中,装饰模式常用于在运行时动态地改变对象的行为,而无需修改原始类的代码。这种模式的核心在于装饰者类与被...

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

    装饰者模式是面向对象设计中的一种经典模式,它在不修改已有对象的源代码或继承体系的情况下,通过组合的方式动态地给对象添加新的行为或职责。这种模式在实际开发中非常常见,尤其在需要灵活扩展功能,而又不想破坏...

Global site tag (gtag.js) - Google Analytics