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

原创 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元”);
}
}
不知道这个算不算装饰者模式的实现。
以上观点纯属个人臆想。不足之处还望各位多多指点。
解释:
因为装饰者模式装饰的是一个接口或者父类下的所有子类,而且也可以被自己装饰,
所以在装饰者类中的构造函数传递的是被装饰类的父类的引用,但是指向的是子类的对象,(也就是所谓的多态),只有这样才可以对一个父类的所有的子类进行装饰。
所以逆向推理可以得出的结论是我们必须实现父级接口或是继承父类。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

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

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

理解装饰者模式

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

装饰者模式Android实例

  • 2016-07-30 09:58
  • 6.77MB
  • 下载

装饰者模式

我所理解的设计模式(C++实现)——装饰者模式(Decorator Pattern)

解决的问题: 我们在装饰新家的时候买了几幅抽象画,买回来之后发现有些加上色彩艳丽的边框更适合我们,而有的加上玻璃罩之后更能符合我们的使用。那我们来怎么解决这个问题呢?他需要动态的给别的对象增加额...

装饰者模式 - PHP版

具有装饰者的模式照片

  • 2009-06-14 00:46
  • 1.78MB
  • 下载

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

来自 :http://www.cnblogs.com/TomXu/archive/2012/02/24/2353434.html 装饰者提供比继承更有弹性的替代方案。 装饰者用用于包装同接口的对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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