关于装饰者模式的开发理解

原创 2017年01月04日 00:41:18

java开发模式中的装饰者模式:
对于很多初学者而言,装饰者模式是一个难点,本人也是最近才对其有所感悟。特意写下此文,与大家探讨,所谓每个人心中都有一个哈姆雷特,所以文章不足之处和与大家想法有所出入的地方,希望读者多多指导共同进步。
假定场景是这样的:你需要去买一个饼,那么卖家会给你提供一个很简单的没有任何增值的饼。此时这个饼的价格为5元。但是,如果你需要加鸡蛋(2元),加火腿(1元),那么最终你获得的饼的价格为5+2+1,即8元。在代码中如何让这个场景实现呢?
1.装饰者模式的前提是有一个你所需要装饰的对象,那么久必须要有一个类来支持这个对象。我在这里将其称之为饼类(Bing.class)其继承了食物这个抽象类或者接口且实现了食物的成员函数price()。
class Bing extends food {
pbulic void price (){
system.out.print(“饼的价格为5元”);
}
}
2.装饰者模式中的装饰物(鸡蛋、火腿)其必须也要实现食物这个抽象类或者接口,并实现其中的price()方法;
//同理写出火腿的类
class Egg extends food{
Bing bing = bing;//持有被装饰的对象
Egg(Bing bing){
this.bing = bing;
}
public void price(){
//调用饼的中的同名方法;所谓的方法增强(如果继承的是饼类就可以这么说)。
bing.price();
system.out.print(“鸡蛋的价格为2元”);
}
}
3.测试类;
class Test {
public static void main(String args[]){
//创建饼的对象
Bing bing = new Bing ;
//利用鸡蛋对饼进行装饰;
Egg egg = new Egg(bing);
egg.price();
}
}

从以上的代码,我个人理解为装饰者模式就是利用一个类去对另外一个类(类中的函数)进行加强,或者就是完全的替代那个被装饰的类。但是我们必须要拥有这个被装饰的类的对象。因为我们需要在装饰类中调用这个类的原来的处理函数,与此同时,我们再对这个函数进行增强操作。所以,所谓的装饰者模式。就是利用现有的类来包含原有的类。


错误的思想如下(这是我再次求证后发现我的之前的观点是错误的),
之前的观点:
那么我们是否需要在装饰者模式中不继承或者实现被继承者所实现的父类或者接口呢?
因为我们仅仅只需要拿到被继承类的对象就可以了。
也就是我自己定义一个类,在构造函数中传入这个被继承的对象。并写一个函数调用这个被继承者的函数。同样也可以实现以上的代码。
class Demo {
Bing bing;
Demo(bing){
this.bing = bing;
}
public void myMethod(){
bing.price();
system.out.print(“这是我自己的函数,不要钱0元”);
}
}
不知道这个算不算装饰者模式的实现。
以上观点纯属个人臆想。不足之处还望各位多多指点。
解释:
因为装饰者模式装饰的是一个接口或者父类下的所有子类,而且也可以被自己装饰,
所以在装饰者类中的构造函数传递的是被装饰类的父类的引用,但是指向的是子类的对象,(也就是所谓的多态),只有这样才可以对一个父类的所有的子类进行装饰。
所以逆向推理可以得出的结论是我们必须实现父级接口或是继承父类。

Java四大特征(抽象、封装、继承、多态)

1.多态 :晚绑定,运行时,一个接口,多种实现 面向对象的四大特性:封装、继承、多态、抽象。从一定角度来看,封装和继承几乎都是为多态而准备的。是最重要的知识点。多态的定义:指允许不同类的对象对同一消息...

推送原理解析 极光推送使用详解

转载自:http://www.apkbus.com/forum.php?mod=viewthread&tid=240555 推送技术产生场景 : -- 服务器端主动性 : 客户端与服务器交...
  • lkx94
  • lkx94
  • 2015年06月13日 15:32
  • 923

简单实例理解装饰者设计模式

1.装饰设计模式: 将一个对象作为参数进行传递,然后对这个对象进行包装---改变其中的方法或者添加一些新的行为---装饰设计模式---装饰者模式---Decorate Model 改变一个...

javaWeb笔记(二) 装饰者模式 以及我的理解

对象增强的手段 继承 被增强的对象固定的 增强的内容也是固定的 装饰者模式 被增强的对象是可以切换的 增强的内容是固定的 动态代理(AOP) 被增强的对象可以切换:Service 增强的内...

理解装饰者模式

装饰者模式的书面定义是:“动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。”——语出《Android源码设计模式解析与实战》。...
  • hmh0512
  • hmh0512
  • 2017年02月11日 11:55
  • 700

通过连接池操作 理解装饰者设计模式 自我理解

装饰者设计模式:用于数据库连接中close方法的增强 自我理解:装饰者设计模式的方法增强,就是自定义一个类去实现我们需要增强的方法的接口,并定义一个成员变量对象去存储我们之前的对象, 那么这个...

设计模式-装饰者模式(Decorator)理解和在Android中的应用

介绍最近写代码没有手感,就看看书找点写代码的灵感。看点高大上的设计模式谈谈自己的理解。我读的是《研磨设计模式》看完之后真正的醍醐灌顶。借用一句话 一本值得反复研读的书 读了设计模式,其实我觉得看...

简单理解设计模式之装饰者模式

闲话不多说,今天来谈谈装饰者模式: 首先,我觉得要学习设计模式,记住它的定义真的挺重要的,或者一开始的时候你不了解,但是后面理解模式的内涵之后,你会发现定义的精辟。 装饰者模式:动态地将责任附加到...

理解设计模式之装饰器模式

概述 向一个现有的对象添加新的功能,同时又不改变其结构。 设计原则 对扩展开发,修改关闭。 简要说明装饰者模式是对现有对象进行装饰,通过装饰,我们的对象对同一种行为可以产生不同的效果,或者说通...

深入理解JavaScript系列(29):设计模式之装饰者模式

来自 :http://www.cnblogs.com/TomXu/archive/2012/02/24/2353434.html 装饰者提供比继承更有弹性的替代方案。 装饰者用用于包装同接口的对...
  • hack2me
  • hack2me
  • 2012年02月25日 08:26
  • 510
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于装饰者模式的开发理解
举报原因:
原因补充:

(最多只允许输入30个字)