`
miaodezhi
  • 浏览: 9164 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

浅谈装饰器模式

阅读更多
浅谈装饰器模式

序:
今天,为了满足我们项目组长的愿望,硬非要把一个简单的一个接口实现函数,扩展为装饰器模式进行处理。据说可以
在以后扩展的时候很有好处。于是乎,我今儿就大学了一把装饰器模式,下面我就谈谈自己的理解吧。

正文---开整:
装饰器模式,顾名思义就是给类或者接口进行装饰的模式。模式这玩意说白了就是把一些浅显易懂的东西,冠以很高深
的名词,让人摸不着头脑,有点类似于哲学。不过里面的思想不可否认还是很有道理的,不然估计也不会有那个神经病
吃多了去搞这玩意,从此让诸位欲成为编程高手的人必经的一个难关。

装饰器涉及四个名词
1、接口或者抽象基类
2、被装饰对象,也就是一个简单的实现了1中提到的接口或者抽象基类的实现类。
3、装饰对象,就是去装饰被装饰对象的对象
4、继承装饰对象类的子类,也就是具体的装饰器类了。
说了这么多,估计你基本跟没听说过一样。好了,来段代码,看看

//这是第一类名词
public interface IDecorate
{
public void sayHello();
}

//这是第二类名词
public class DecorateImpl implements IDecorate
{
public void sayHello()
{
System.out.print("Hello");
}
}

//这是第三类名词,真正的装饰器就在这里开始了,也是所有欲实现装饰器的父类
public class Decorate implements IDecorate
{
//声明一个被装饰的对象
private IDecorate decorate;

//被装饰对象从装饰器的构造函数中传进来(必须这样做)
public Decorate(IDecorate decorate)
{
this.decorate = decorate;
}

//在基类装饰器中只调用被装饰对象的方法
public void sayHello()
{
decorate.sayHello();
}
}
再对这个装饰器的基类说明一下,在每个装饰器模式中,这个类的结构基本不变
或者说这上面是装饰器第三类名词中最小的类了,必须有以上定义的这些元素。

//这是第四类名词,装饰就看这里了
public class SimpleDecorate extends Decorate
{
public Decorate(IDecorate decorate)
{
super(decorate);
}

//开装饰了哦。。。
public void sayHello()
{
//在原来的方法中加入了sayChina方法。
sayChina();

super.sayHello();

//在原来的方法中加入了sayWorld方法。
sayWorld();
}

public void sayChina()
{
System.out.print("China, ");
}

public void sayWorld()
{
System.out.print(" World!\n");
}
}

//来,测试一下
public void TestDecorate()
{
//不使用装饰器
public static void unUseDecorate(IDecorate decorate)
{
//输出 Hello
decorate.sayHello();
}

//使用装饰器
public static void useDecorate(IDecorate decorate)
{
IDecorate simpleDecorate = new SimpleDecorate(decorate);

//要调用装饰了的方法
//输出 China, Hello World!
simpleDecorate.sayHello();
}

public static void main(String[] argv)
{
IDecorate decorate = new DecorateImpl();
}
}
//是不是发现,原来只输出的hello的方法被装饰后,在其前和其后分别输出了china和world啦。

看到装饰器的威力了吧,把原来不变的方法改变了。那我们就来谈谈他的使用场景吧:
1、装饰器模式主要装饰供外部调用的接口方法,如果一个接口方法只是提供给内部调用,则不能使用该模式。
2、装饰器模式主要装饰可能要改变的接口方法,如果类中的某种行为在将来可能发生变化,而你又懒得去改变
   原来的类,那么就可以考虑使用装饰器模式了。
  
注意:模式只是解决问题的一种途径,没有必要非得在某块使用模式,所以装饰器模式这种东西,切勿刻意为之。
见识肤浅,望各位指教。
OK,打完收工。
分享到:
评论
4 楼 ysen 2009-02-18  
这和代理模式有什么区别?
3 楼 miaodezhi 2009-01-18  
wendong007 写道

你们组长还真逗啊

呵呵,其实偶们组长对我帮助还是蛮大的,经验特别丰富,能力那可是我的偶像啊。
2 楼 wendong007 2009-01-16  
你们组长还真逗啊
1 楼 pangtao 2009-01-16  
受益匪浅,感谢lz的分享

相关推荐

    浅谈Java设计模式系列-装饰器模式

    Java 设计模式系列 - 装饰器模式 Java 设计模式系列 - 装饰器模式是 Java 设计模式系列中的一种重要模式,它主要用于对目标方法进行增强,提供新的功能或者额外的功能。装饰器模式的主要特点是涉及的是单方,目标...

    浅谈OOP之uml设计模式

    装饰器模式则通过继承并添加新的行为来扩展已有类的功能。 **总结** 理解并运用UML设计模式是提升软件开发效率和质量的关键。通过学习和实践这些模式,开发者可以更好地理解和重构复杂系统,同时提高代码的可读性...

    设计模式浅谈24种.ppt

    在《设计模式浅谈24种》中,主要讨论了24种经典的GOF设计模式,这些模式被分为三大类:创建型、结构型和行为型。 创建型模式主要关注对象的创建,包括以下几个核心模式: 1. **Abstract Factory**(抽象工厂)模式...

    从追MM浅谈Java的23种设计模式

    - 构造器模式(原型模式):通过复制已有对象来创建新对象。 2. 结构型设计模式: - 适配器模式:将两个不兼容的接口转换为可以互相操作的接口。 - 桥接模式:将抽象部分与实现部分分离,使它们可以独立变化。 ...

    C#面向对象设计模式纵横谈 12种设计模式

    本篇将深入探讨12种核心的设计模式,它们是:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、桥接模式、组合模式、享元模式和观察者模式。 1. **单例模式**:确保一...

    浅谈解除装饰器作用(python3新增)

    在Python编程中,装饰器是一种非常有用的设计模式,用于在不修改函数定义的情况下增加函数的功能。装饰器通过将原函数包裹在一个新的函数中来实现增强功能,这样的操作被称为“装饰”。然而,在某些情况下,我们可能...

    浅谈JAVA设计模式之代理模式

    * 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。 在Java中,代理模式可以使用接口和实现类来实现。例如,可以创建一个Image接口和实现了Image接口的实体类RealImage,然后创建一个代理...

    浅谈技工学校汽车技术服务人才培养模式的改革.docx

    第三学期,学生进一步深入学习汽车专业知识,如汽车电子技术、汽车自动变速器等,同时接触汽车销售和服务管理。第四学期,通过汽车电控技术、汽车维修实战等课程,提升学生的实际操作能力和汽车服务技能。第五学期,...

    漫谈设计模式代码

    4. **装饰器模式**:动态地给一个对象添加一些额外的职责,装饰者和被装饰对象有相同的接口,可以无限制地装饰。书中可能展示如何通过继承和组合来实现装饰器。 5. **代理模式**:为其他对象提供一种代理以控制对这...

    C#面向对象设计模式纵横谈(11)

    6. **装饰器模式**: 装饰器模式动态地给对象添加额外的职责,允许扩展对象的功能而不影响其结构。在C#中,可以利用接口和继承来实现装饰器。 7. **代理模式**: 代理模式为其他对象提供一种代理以控制对这个对象的...

    设计模式与现实生活,形象,生动

    装饰器模式就像是在照片背后写上一段感人的话再送给MM作为礼物。这种模式允许你在不改变对象原有结构的前提下,动态地给对象添加新的功能。例如,在原有的照片基础上增加一些额外的信息,而无需改变照片本身的属性。...

    浅谈五星级酒店电气设计.zip

    《浅谈五星级酒店电气设计》 五星级酒店作为高端住宿服务的代表,其电气设计不仅要满足基本的功能需求,还需考虑到舒适性、安全性、节能性和智能化等多个方面。本文将深入探讨五星级酒店电气设计的关键要素,旨在为...

    Python3之接口类(InterfaceClass)浅谈

    在Python3中,我们可以使用`abstractmethod`装饰器和`ABCMeta`元类来创建接口类。 一、接口类的定义与作用 接口类的作用在于规定子类必须实现哪些方法,以满足特定的协议或标准。它自身不包含任何实现,只定义了...

    浅谈家庭中央空调的应用与发展毕业论文.doc

    本文以“浅谈家庭中央空调的应用与发展”为主题,旨在探讨现代住宅中逐渐普及的家用中央空调系统。随着生活水平的提高和技术的进步,家庭中央空调因其高效、节能、舒适等特性,正逐渐取代传统的分体式空调,成为家居...

    浅谈django三种缓存模式的使用及注意点

    如果需要根据请求头部或cookie的变化来控制缓存行为,可以使用@vary_on_headers和@vary_on_cookie装饰器。这对于提供个性化内容尤为重要。 4. 考虑缓存失效策略: 当数据发生变化时,需要一种方式来清除旧的缓存...

    浅谈体育教学中学生创新能力的培养.docx

    此外,教师还可以通过装饰或改良器材,如在小沙包上缝上彩带来吸引学生的注意力,不仅有助于教学,还能激发学生创新体育器材的兴趣。同时,建立和谐融洽的师生关系,教师需要转变为指导者和朋友的角色,尊重每个学生...

    design-pattern-java.pdf

    自定义语言的实现——解释器模式(五) 自定义语言的实现——解释器模式(六) 迭代器模式-Iterator Pattern 遍历聚合对象中的元素——迭代器模式(一) 遍历聚合对象中的元素——迭代器模式(二) 遍历聚合对象中的...

    C#单例模式视频讲解

    在C#中,除了单例模式,还有其他设计模式,如工厂模式、观察者模式、装饰器模式等,都是面向对象设计的重要组成部分。在实际开发中,合理应用设计模式能够提高代码的可读性、可维护性和复用性。因此,学习和理解这些...

Global site tag (gtag.js) - Google Analytics