设计模式之装饰模式_第1页
设计模式之装饰模式_第2页
设计模式之装饰模式_第3页
设计模式之装饰模式_第4页
设计模式之装饰模式_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上软件模式课程论文装饰模式应用分析 姓名: XXX 学号: XXXXXXXXXXX 班级: XXXXXXXXXX 2017年 4 月 16 日目录1.1摘要装饰模式是一种用于替代继承的技术,它通过一种无须定义的子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系,在装饰模式中引入了装饰类,在装饰类中既可以调用被装饰类的方法,还可以定义新的方法,以便扩充类的功能。装饰模式降低了系统的耦合度,可以动态增加或删除对象的职责,并使得需要装饰的具体构件类和具体装饰类可以独立变化,增加新的具体构件类和具体装饰类都非常方便,满足“开闭原则”的要求。2.1关键字面

2、向对象;java接口;接口编程;装饰模式。3.1开发工具Eclipse java语言开发4.1模式定义动态的给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。英文定义“Attach additional responsibility to an object dynamically. Decorators provide A flexible alternative to subclassing for extending functionlity”5.1装饰模式结构a、Component(抽象构件)抽象构件定义了对象的接口,可以给这些对象动态增加职责(方法)。

3、抽象构件是具体构件和抽象装饰类的共同父类,它声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。b、ConcreteComponent(具体构件)具体构件定义了具体的构件对象,实现了在抽象构件中声明的方法,装饰器可以给他增加额外的职责。c、Decorator(抽象装饰类)抽象装饰类是抽象构件类的子类,用于给具体构件增加职责,但是具体职责在其子类中实现。它维护一个指向抽象构件对象的引用,通过该引用可以调用装饰之前构件对象的方法,并通过其子类扩展该方法,以达到装饰的目的。D、ConcreteDecorator(具体装饰类)具

4、体装饰类是抽象装饰类的子类,负责向构件添加新的职责,每一个具体装饰类都定义了一些新的行为,它可以调用在抽象装饰类中定义方法,并可以增加新的方法以便扩充对象的行为。6.1装饰模式实例:简单的手机(SimplePhone)在接收到来电的时候,会发出声音来提醒主人;而现在我们需要为该手机添加一项功能,在接收来电的时候,除了有声音还能产生振动(JarPhone);还可以得到更加高级的手机(ComplexPhone),来电时它不仅能够发出声,产生振动,而且还有闪关灯提示,现用装饰模式来模拟手机功能的升级过程。6.1.1代码分析6.1.1.1Phone(抽象构件)代码:package XK_Phone;p

5、ublic abstract class Phone public abstract void voice();6.1.1.2 ConcreteComponent(具体构件)代码:/构件类public class SimplePhone extends Phonepublic SimplePhone()System.out.println(这是一部简单手机!);public void voice()/ TODO Auto-generated method stubSystem.out.println(手机来电声音!);6.1.1.3(抽象装饰类)代码:Changerpublic class C

6、hanger extends Phone private Phone phone;public Changer (Phone phone)this.phone=phone;Overridepublic void voice() / TODO Auto-generated method stubphone.voice();6.1.1.4 (具体装饰类):ComplexPhone类/关联JarPhone类public class ComplexPhone extends Changerpublic ComplexPhone(Phone phone)super(phone);System.out.p

7、rintln(变成高级手机!);flash();public void flash()System.out.println(手机来电闪烁灯光提示!);JarPhone类public final class JarPhone extends Changerpublic JarPhone(Phone phone) super(phone);/ TODO Auto-generated constructor stubSystem.out.println(手机增加振动功能!);public void voice()super.voice();System.out.println(来电振动!);6.1.

8、1.5客户端/客户类public class Client public static void main(String arg)Phone p1=new SimplePhone();/父类调用子类方法p1.voice();System.out.println(*);Phone p2=new JarPhone(p1);p2.voice();System.out.println(*);Phone p3=new ComplexPhone(p2);p3.voice();6.1.1.5运行结果:7.1装饰模式的优缺点7.1.1优点:1、装饰者模式可以提供比继承更多的灵活性 2、可以通过一种动态的方式来

9、扩展一个对象的功能,在运行时选择不同的装饰器,从而实现不同的行为。 3、通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。可以使用多个具体装饰类来装饰同一对象,得到功能更为强大的对象。 4、具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,在使用时再对其进行组合,原有代码无须改变,符合“开闭原则”。7.1.2缺点:1、会产生很多的小对象,增加了系统的复杂性 2、这种比继承更加灵活机动的特性,也同时意味着装饰模式比继承更加易于出错,排错也很困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为烦琐。8.1结论1、 组合和委托可以在运行时动态的添加新的行为,而继承是静态的,在系统编译时就已经决定了对象的行为。 2、装饰者模式意味着一群装饰者类,这些类用来包装具体组件 3、装饰者可以在被装饰者的行为前面或者后面加上自己的行为,甚至可以将被装饰者的行为整个取代掉,从而达到特定的目的。 4、可以用多个装饰者包装一个组件。 5、装

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论