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

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

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

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

装饰者模式理解

装饰者模式理解
  • feipeixuan
  • feipeixuan
  • 2014年04月21日 17:00
  • 1095

关于装饰者模式的个人理解

    学习设计模式的人都知道装饰者模式,本人一样,而且看过很多不同的人写的,但每次的认识都不相同,以下本人最新的体会,不对之处请指出。我认为装饰者模式是即用了继承,又使用了复合,所以它即有继承的好处...
  • juanxincai
  • juanxincai
  • 2009年07月04日 21:06
  • 300

简单Java代码实例助你通俗易懂的理解什么是装饰(者)设计模式 (Decorator)

首先抛开到处都有的文字概念。来看下面的例子。 现在以:人吃饭。这个需求为例。来讲解这个设计模式。 1.0:想当年,人们都比较朴实。吃饭就是简简单单的吃饭。 那么PersonBefore类里面一个简单的...
  • qq_27093465
  • qq_27093465
  • 2016年11月24日 15:34
  • 1010

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

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

设计模式实战应用之三:装饰者模式

装饰者模式的定义        装饰者模式是应用最普遍的设计模式之一。伟大的 Java 缔造者们将设计模式的应用发挥到了极致,作为解释型语言的 Java 从诞生到今天始终能够作为最主流与应用最广泛的语...
  • defonds
  • defonds
  • 2014年01月03日 21:17
  • 6920

关于构造函数的理解

代码 1(父类和子类都自定义构造函数):class father { public: father(int agee):age(agee) { cout...
  • lh1573378488
  • lh1573378488
  • 2016年09月10日 10:36
  • 373

装饰者模式 java代码小示例

1、定义及作用该模式以对客户端透明的方式扩展对象的功能。2、涉及角色抽象构件角色:定义一个抽象接口,来规范准备附加功能的类。具体构件角色:将要被附加功能的类,实现抽象构件角色接口。抽象装饰者角色:持有...
  • xiaoquanhuang
  • xiaoquanhuang
  • 2011年04月08日 20:07
  • 2835

关于线程的理解

1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完...
  • u010214269
  • u010214269
  • 2015年08月29日 23:27
  • 804

WEB开发框架配置文件和各层注解

记录一点关于这次“项目管理”课程做的轻量级企业ERP的关于框架部分的知识 我们采取的是SpringMVC + Spring + Hibernate开发的 本文主要记录: 框架需要的配置文件的配置 ...
  • u011133213
  • u011133213
  • 2014年03月19日 13:05
  • 3449
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于装饰者模式的开发理解
举报原因:
原因补充:

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