文章标题

来源:互联网 发布:ubuntu更改文件夹权限 编辑:程序博客网 时间:2024/04/29 15:17

设计模式学习之装饰者模式

概述

23种设计模式之一,英文名Decorator Pattern,又叫装饰者模式。装饰者模式是在不改变原类文件和继承关系的情况下,动态地扩展一个对象功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

特点

  1. 装饰对象和真实对象有共同的接口,这样客户端对象就能按照和真实对象相同的方式和装饰对象交互;
  2. 装饰对象包含一个真实对象的引用,通过构造函数的传参来确定要装饰的对象;
  3. 装饰对象接受所有来自客户端对象的请求。它把这些请求转发给真实的对象;
  4. 装饰对象可以再转发这些请求以前或者以后增加一些附件功能。这样就确保了再运行时,不用修改给定对象的结构就可以再外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。

优点

  1. 相比于继承方式扩展对象的功能,装饰者模式具有更多的灵活性;
  2. 通过不同的具体装饰类以及排列组合,可以方便的设计不同行为的组合;

缺点

  1. 灵活性也就意味着复杂性;
  2. 装饰者模式会出现很多小类,过度使用会导致程序会什么复杂;

设计原则

  1. 多用组合,少用继承;
  2. 对扩展开发,对修改关闭;
        MusicPhoneDecrote music = new MusicPhoneDecrote(new RingPhoneDecrote(new phone()));        music.call();        RingPhoneDecrote ring = new RingPhoneDecrote(new MusicPhoneDecrote(new phone()));        ring.call();

其中,phone.java内容

public  class phone implements IPhone{   public void call(){       System.out.println("call........");   }}

RingPhoneDecrote.java内容

public class RingPhoneDecrote extends PhoneDecrote {    public RingPhoneDecrote(IPhone phone) {        super(phone);    }    @Override    public void call() {        System.out.println("ring....");        super.call();    }}
0 0