设计模式之装饰者模式
来源:互联网 发布:俊知地产 编辑:程序博客网 时间:2024/06/01 10:52
概述
装饰者模式,不改变原有类的情况下,给一个类动态的增加方法
比如:A是超类,这个时候有个情况跟超类不一样,可以新建一个B类,继承B,C有些方法不一样,C继承B,甚至有D继承C,出现如下情况
D -> C -> B -> A
使用子类:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。
使用装饰者模式
代码实例
中国女孩,黑头发,黄皮肤。。等等都是中国女孩的特性
美国女孩,金黄色头发,高
特性是动态的,可能是多个,不确定性
/** * @Description 抽象类Gril * @Date 2017/7/2 22:01 * @Since v1.7 * @Autor Nick */public abstract class Girl { String desc = "no particular"; public String getDesc() { return desc; }}
创建中国女孩和美国女孩
/** * @Description * @Date 2017/7/2 22:04 * @Since v1.7 * @Autor Nick */public class ChineseGirl extends Girl { public ChineseGirl() { desc = "+ChineseGirl"; }}/** * @Description 美国Girl * @Date 2017/7/2 22:02 * @Since v1.7 * @Autor Nick */public class AmericanGril extends Girl { public AmericanGril() { desc = "+AmericanGril"; }}
创建装饰者类
/** * @Description 装饰者 * @Date 2017/7/2 22:06 * @Since v1.7 * @Autor Nick */public abstract class GirlDesorator extends Girl { public abstract String getDesc();}
各种特征、优缺点等,里面是动态的,可以随时增加
/** * @Description 黄头发 * @Date 2017/7/2 22:07 * @Since v1.7 * @Autor Nick */public class GoldenHair extends GirlDesorator { private Girl girl; public GoldenHair(Girl girl) { this.girl = girl; } @Override public String getDesc() { return girl.getDesc() + "+ with golden hair"; }}/** * @Description 黑头发 * @Date 2017/7/21 22:26 * @Since v1.7 * @Autor Nick */public class BlackHair extends GirlDesorator { private Girl girl; public BlackHair(Girl girl) { this.girl = girl; } @Override public String getDesc() { return girl.getDesc() + "+ with black hair"; }}/** * @Description 高 * @Date 2017/7/2 22:08 * @Since v1.7 * @Autor Nick */public class Tall extends GirlDesorator { private Girl girl; public Tall(Girl girl) { this.girl = girl; } @Override public String getDesc() { return girl.getDesc() + "+is very tall"; }}
测试类
/** * @Description 测试类 * 如果需要是美国女孩,只需要Girl g1 = new AmericanGril(); * @Date 2017/7/2 22:09 * @Since v1.7 * @Autor Nick */public class MainTest { public static void main(String[] args) { Girl g1 = new ChineseGirl(); System.out.println(g1.getDesc()); BlackHair g2 = new BlackHair(g1); System.out.println(g2.getDesc()); Tall g3 = new Tall(g2); System.out.println(g3.getDesc()); }}
装饰模式 VS 继承
阅读全文
0 0
- 设计模式之装饰者设计模式
- 设计模式 之 装饰者
- 设计模式之装饰者模式
- 设计模式之装饰者模式
- 设计模式之Decorator(装饰者模式)
- 设计模式之五---装饰者模式
- 设计模式之---装饰者模式
- c++设计模式之装饰者模式
- Php设计模式之装饰者模式
- java设计模式之装饰者模式
- 设计模式之装饰者模式
- 【设计模式】之装饰者模式
- HeadFirst设计模式之装饰者模式
- c++设计模式之装饰者模式
- 设计模式之装饰者模式
- 设计模式之--装饰者模式
- 设计模式之装饰者模式
- 设计模式之装饰者模式
- 542. 01 Matrix [LeetCode]
- bootsrap解决悬浮层(悬浮header、footer)会遮挡住内容的方法
- 设计模式的六大基本原则:
- Android Studio 骚气的logcat配色
- 【spark,RDD,1】弹性分布式数据集RDD介绍
- 设计模式之装饰者模式
- 14-Vue自定义指令
- 【简记】Java Web 内幕——Cookie与Session简介和使用
- Ubuntu16.04搭建hadoop开发环境
- 2017年7月21日22:38:17
- oracle 11.2 rac 更改子网掩码引起的haip无法启动的处理过程
- 排序算法学习(5)
- Ubuntu Server搭建java web环境
- poj 1742 Coins