JAVA设计模式初探之装饰者模式
来源:互联网 发布:淘宝钻石展位价格 编辑:程序博客网 时间:2024/06/08 06:14
这个模式花费了挺长时间,开始有点难理解,其实就是
定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。
要点:装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为
//定义被装饰者 public interface Human { public void wearClothes(); public void walkToWhere(); } //定义装饰者 public abstract class Decorator implements Human { private Human human; public Decorator(Human human) { this.human = human; } public void wearClothes() { human.wearClothes(); } public void walkToWhere() { human.walkToWhere(); } } //下面定义三种装饰,这是第一个,第二个第三个功能依次细化,即装饰者的功能越来越多 public class Decorator_zero extends Decorator { public Decorator_zero(Human human) { super(human); } public void goHome() { System.out.println("进房子。。"); } public void findMap() { System.out.println("书房找找Map。。"); } @Override public void wearClothes() { // TODO Auto-generated method stub super.wearClothes(); goHome(); } @Override public void walkToWhere() { // TODO Auto-generated method stub super.walkToWhere(); findMap(); } } public class Decorator_first extends Decorator { public Decorator_first(Human human) { super(human); } public void goClothespress() { System.out.println("去衣柜找找看。。"); } public void findPlaceOnMap() { System.out.println("在Map上找找。。"); } @Override public void wearClothes() { // TODO Auto-generated method stub super.wearClothes(); goClothespress(); } @Override public void walkToWhere() { // TODO Auto-generated method stub super.walkToWhere(); findPlaceOnMap(); } } //定义被装饰者,被装饰者初始状态有些自己的装饰 public class Person implements Human { @Override public void wearClothes() { // TODO Auto-generated method stub System.out.println("穿什么呢。。"); } @Override public void walkToWhere() { // TODO Auto-generated method stub System.out.println("去哪里呢。。"); } } //测试类,看一下你就会发现,跟java的I/O操作有多么相似 public class Test { public static void main(String[] args) { Human person = new Person(); Decorator decorator = new Decorator_zero(new Decorator_first( person)); decorator.wearClothes(); } }
我的理解:
看这部分内容可以先去看看,额,可能没有太大的关系!
多态性:http://blog.csdn.net/thinkGhoster/article/details/2307001
重载与重写:http://www.cnblogs.com/loonggg/archive/2013/01/16/2862356.html
构造函数:http://blog.csdn.net/u012493207/article/details/50148959
(有误请指教)
阅读全文
0 0
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- java 设计模式之初探装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之装饰者模式
- angularJs功能实现简集
- iOS 布局篇(二) Masonry 使用与说明
- java提高篇(九)-----详解匿名内部类
- C#学习—连接数据库通用增删改,查询
- laravel--5 Eloquent ORM("优雅的"对象关系映射)
- JAVA设计模式初探之装饰者模式
- java中byte数组和int,long,short之间的转换
- java提高篇(十)-----强制类型转换
- gcc -I -L -l区别
- 关于Gson解析复杂类型的json数据
- java提高篇(十一)-----代码块
- hadoop map join
- 解决跨域访问时的session保持问题
- 隐藏服务器头信息