设计模式系列(四)装饰者模式
来源:互联网 发布:马来西亚域名 编辑:程序博客网 时间:2024/05/22 07:05
继续上一系列的需求:我们需要一个能唱歌、能跳舞、会暖床的女友。现在摆在我们面前的只有一个会唱歌的,我们既不能打,也不能骂,那该怎么办呢?别急,装饰者模式帮你实现这个愿望。
装饰者模式:不修改原来的类来为一个动态的增加一些功能。
public class Girl1 implements Girl{ public void sing(){System.out.println("我会唱歌"); }}小伙伴可以看到,上边这个类就是给我们的一个只会唱歌的女孩,让LZ带着大家不打不骂的把她变成一个还能跳舞,还能暖床的全能女友。
首先抽象出来一个女孩的接口,不仅这一个女孩我们可以增加功能,再来几个也可以搞定哦。
public interface Girl {public void sing();}然后我们来新建一个装饰类来负责给这个只会唱歌的小姑娘来培训一番
public abstract class GirlDecorator implements Girl {protected Girl girl;public GirlDecorator(Girl girl){this.girl= girl;}public GirlDecorator() {}}这个装饰类是一个抽象类,他实现了女孩这个接口,一个有参的构造方法代表着他持有的女孩的引用是根据构造方法来确定的,也就是说,你把谁传给我,我就帮你调教谁O(∩_∩)O
比如会跳舞
public class DanceGirl extends GirlDecorator {public DanceGirl(Girl girl) {super(girl);}public void sing(){girl.sing();dance();}public void dance(){System.out.println("我会跳舞");}}
再比如会暖床
public class WarmBedGirl extends GirlDecorator {public WarmBedGirl(Girl girl) {super(girl);}public void sing(){girl.sing();warmBed();}public void warmBed(){System.out.println("我会暖床");}}这两个类都是装饰类的子类,他们可以动态的根据我们的需求来为我们构造具有各自功能的女友
public class Main {public static void main(String[] args) {//1.初始的女孩只能唱歌Girl girl =new Girl1();girl.sing();System.out.println("-----------------------------------");//2.能唱歌能跳舞的女孩Girl girl1=new DanceGirl(girl);girl1.sing();System.out.println("-----------------------------------");//3.能唱歌能暖床的女孩Girl girl2=new WarmBedGirl(girl1);girl2.sing();}}这个就是测试类了,装饰者模式讲到这里。希望大家记住的是他的思想,而不是代码,相信你们理解了以后肯定会写出比我更漂亮的代码。
最后奉上源码一份供大家参考。
阅读全文
0 0
- 设计模式系列(四)装饰者模式
- 设计模式系列之四:装饰者模式(Decorator Pattern)
- 设计模式系列之四装饰者模式
- 设计模式系列(四)——装饰模式
- 大话设计模式(四)装饰模式
- 设计模式(四)装饰模式
- JAVA系列-设计模式-装饰者模式
- 设计模式系列:装饰者模式
- Head First 设计模式(四)装饰者模式
- 设计模式系列(三)装饰者模式(Decorator Pattern)
- Java/Android 设计模式系列(7)--装饰者模式
- 设计模式系列-装饰模式
- 装饰模式----设计模式系列
- 设计模式学习(四)——装饰者模式
- 设计模式实践(四)装饰模式(decorator)
- 设计模式笔记(四) —— 装饰模式
- 大话设计模式学习(四)——装饰模式
- 设计模式四(装饰模式,采用python 实现)
- tomcat 设置jdk环境变量
- 小白也能够熟练掌握常用的数据库使用技巧
- JS实现点击导航栏之后页面滚动
- 八、索引
- Using Markov Chains for Android Malware Detection
- 设计模式系列(四)装饰者模式
- 分页
- ◆练习题目◆◇区间动态规划◇ Brackets Sequence
- 陶陶摘苹果
- 九、MongoDB中explain()
- oracle分析函数
- 测试布局
- iOS拖到工程里的图片 、MP3 文件获取为空
- 十、特殊的索引和集合