decorate(装饰)
装饰模式 通俗的讲,也就是将一个对象装饰以后还是这个对象.它只是起到了一个装饰的作用,起到了一个修饰的作用,使物品更加实用,好看,美观,等,就象房子,在开发商盖好以后照样能住人,但为什么好多人都要进行装饰一下才住呢?下面举个小例子.哈哈!
eg: MM没打扮以前是MM,在打扮以后就可能是漂亮的MM,当然打扮可以分为好多种,可以是喜欢抹粉的MM,喜欢带手饰的MM,喜欢抹口红的MM等等.但它最终还只是一个对象,还是一个MM.这就是我的理解,当然现实中的好多东西都可以看成需要装饰的东西,比如普通的桌子,房子,杯子等等一切所有的物质性东西,都可以看成是一个对象.但它们被特殊的装饰以后可能会大变样,让你简直不敢相信,它居然是一个MM,或一张桌子,一个杯子,等等.
public interface MM(){
public String dressUp();
}
public class fenMM implements MM(){
public String dressUp(){
return "抹粉的MM" ;
}
}
public class mouthMM implements MM(){
public String dressUp(){
return "抹口红的MM" ;
}
}
当然用户可能只能不只一种打扮,所以后面它会利用装饰模式去进行再进一步的打扮.
public interface OtherDecoator implements MM{
}
public class 带饰品的MM implements OtherDecoator(){
private MM mm;
//为调用原来计划需要执行的任务做准备
public 带饰品的MM(MM mm){
this.mm= mm;
}
public String dressUp(){
return mm.dressUp() +"带饰品的MM";
}
}
public class 带饰品的1MM implements OtherDecoator(){
private MM mm;
//为调用原来计划需要执行的任务做准备
public 带饰品的MM(MM mm){
this.mm= mm;
}
public String dressUp(){
return mm.dressUp() +"带饰品的MM";
}
}
public class TestDecorator{
public static void main(String[] args){
MM mm= new fenMM(); //只抹粉的姑娘.这个姑娘不满足现状
mm= new 带饰品的MM(mm);
mm= new 带饰品1的MM(mm);
mm.dressUp();
}
}
分享到:
相关推荐
让我们逐一深入理解这些角色: 1. 抽象组件(Component):定义组件对象的接口,这样装饰者和组件对象可以具有相同的接口。这使得装饰者可以与组件对象互换,且客户代码可以一致地处理它们。 2. 具体组件...
Python库是开发者在编程时经常会使用的工具,它们提供了一系列预定义的功能,可以帮助程序员快速...通过学习和使用这个库,开发者能够深入理解Python装饰器的工作原理,并将其应用到实际项目中,提升代码质量与效率。
首先,让我们了解 DECORATE 块。在 ZDoom 引擎中,DECORATE 是一种脚本语言,允许开发者定义新的游戏实体,如怪物、物品、玩家角色等。这些实体具有各种属性和行为,如移动方式、攻击模式等。而 Decorate Editor ...
下面我们将深入探讨装饰者模式的原理、应用场景以及如何在Java中实现。 1. **装饰者模式的组成部分** - **Component(组件)**:定义一个对象接口,供其他类使用。装饰类和被装饰的类都必须实现这个接口,以确保...
`tree.getDecorator` 方法用于创建装饰器并将其与基础组件关联,`RedBalls` 是一个具体的装饰器,它在调用父类(即基础组件)的 `decorate` 方法后,再添加自己的装饰行为。 装饰者模式的优点包括: 1. 动态性:...
总之,《dojo toturial with design best practise》是Dojo开发者的重要参考资料,它将帮助你深入了解Dojo框架,并教会你如何结合设计模式来编写高效、可维护的代码。通过学习和实践书中的例子,你将能够更好地应对...
首先,"TPshop3.5.0源码下载"意味着这个版本包含了完整的系统源代码,用户可以深入理解其内部机制,进行二次开发或定制化改造。源码的开放性使得开发者能够根据业务需求调整功能,增加模块,或者修复潜在的bug,这是...
通过这个Java培训课程,开发者将深入了解如何利用JBOSS SEAM和Facelets进行高效的企业级应用开发,理解其背后的设计理念和技术优势,从而提升开发质量和效率。课程内容详实,覆盖了从理论到实践的各个环节,对于希望...
ASP.NET Core是一个跨平台...学习这个压缩包中的内容,开发者可以深入理解如何在ASP.NET Core中利用反射进行服务注册,以及如何使用装饰器模式增强服务的行为。这将有助于构建更加灵活和可扩展的ASP.NET Core应用程序。
首先,让我们深入了解一下Java语言在系统开发中的角色。Java是一种跨平台的面向对象编程语言,具有强大的类库支持和优秀的性能。在构建此类管理系统时,Java的面向对象特性使得代码结构清晰,易于维护。同时,Java的...
通过以上内容,你应该对如何在Android应用中实现日历功能有了更深入的理解,包括如何利用四大组件和第三方库`material-calendarview`。记住,实践是检验真理的唯一标准,动手实践才能更好地掌握这些知识点。祝你在...
在深入解析这个项目之前,我们先要理解Doom的基础知识。Doom是由id Software开发并于1993年发布的开创性游戏,以其快节奏的战斗、恐怖的环境和可自定义的关卡而闻名。DoomRun很可能是对原版Doom的一个扩展或修改,...
SiteMesh 是一个开源的 Web 应用程序框架,主要用于页面布局和装饰,它可以帮助开发者实现网站的统一界面风格,简化页面的布局工作。在本示例中,我们将深入...通过研究这些文件,可以更深入地理解和应用 SiteMesh。