美文网首页
设计模式学习笔记——装饰模式

设计模式学习笔记——装饰模式

作者: AndrLin | 来源:发表于2017-04-13 20:39 被阅读0次

定义


装饰模式——动态地将责任附加到对象上。就增加功能来说,装饰模式相比生成子类更为灵活。

使用场景


  • 需要透明且动态地扩展类的功能时。
  • 需要去除相关类中重复的装饰逻辑时。

UML类图


  • Component:是定义的一个对象接口,可以给这些对象动态地添加职责。
  • ConcreteComponent:组件具体实现类。该类是Component类的基本实现,也是我们装饰的具体对象。
  • Decorator:装饰抽象类。其内部一定要有一个指向组件对象的引用。
  • ConcreteComponentA:具体的装饰者实现类。

例子


人的着装就是人的装饰,下面用小美着装打扮来演示装饰模式:
人着装接口:

interface People {
    void dress();
}

小美:

public class XiaoMei implements People {
    private String name;

    public XiaoMei(String name) {
        this.name = name;
    }

    @Override
    public void dress() {
        System.out.print(name);
    }
}

着装类:

public class Finery implements People {
    protected People people;

    public Finery(People people) {
        this.people = people;
    }

    @Override
    public void dress() {
        if (people != null) {
            people.dress();
        }
    }
}

具体着装类:

public class WhiteTShirt extends Finery {
    public WhiteTShirt(People people) {
        super(people);
    }

    @Override
    public void dress() {
        super.dress();
        System.out.print(" 上身穿简单白T恤 ");
    }
}

public class Tights extends Finery {
    public Tights(People people) {
        super(people);
    }

    @Override
    public void dress() {
        super.dress();
        System.out.print(" 下半身紧身小脚裤 ");
    }
}

public class NickShoes extends Finery {

    public NickShoes(People people) {
        super(people);
    }

    @Override
    public void dress() {
        super.dress();
        System.out.print(" 脚穿Nike鞋 ");
    }
}

客户端调用:

public class Test {

    public static void main(String[] args) {
        XiaoMei xiaoMei = new XiaoMei("小美");

        WhiteTShirt wt = new WhiteTShirt(xiaoMei);
        Tights ts = new Tights(wt);
        NickShoes ns = new NickShoes(ts);
        ns.dress();
    }
}

输出结果:

小美 上身穿简单白T恤 下半身紧身小脚裤 脚穿Nike鞋

这只是一个简单的例子,你可以灵活的实现其他的具体着装类,在使用的时候替换。

总结


装饰模式的优点就是把类中的装饰功能从类中搬移去除,这样可以简化原有的类。有效地把类的核心职责和装饰功能区分开,而且可以有效的去除相关类中重复的装饰逻辑。

本博文为读书笔记:
《Head First 设计模式》
《大话设计模式》
《Android源码设计模式解析与实战》

相关文章

  • 设计模式整理(11) 装饰模式

    学习《Android 源码设计模式解析与实践》系列笔记 介绍 装饰模式,也称包装模式,结构型设计模式之一。 定义 ...

  • Decorator 装饰模式

    设计原则学习笔记 设计模式学习笔记 作用 动态的给一系列类添加新的属性以及操作。装饰模式和桥接模式有点像,桥接模...

  • 设计模式学习笔记——装饰模式

    定义 装饰模式——动态地将责任附加到对象上。就增加功能来说,装饰模式相比生成子类更为灵活。 使用场景 需要透明且动...

  • 装饰对象:装饰者模式

    装饰对象:装饰者模式   这是《Head First设计模式(中文版)》第三章的读书笔记。   装饰者模式,可以称...

  • 装饰者模式——IO流运用

    推荐博客Java设计模式学习09Java设计模式学习09Java设计模式学习09 装饰者模式还是比较难懂的。。。。...

  • 32 Java设计模式系列-装饰者模式

    装饰者模式 装饰者模式是非常常见的设计模式之一,写个笔记,记录一下我的学习过程和心得。 首先了解一些装饰模者式的定...

  • 9、结构型模式-装饰器设计模式

    1、如虎添翼的设计模式-装饰器设计模式 简介:讲解-装饰器设计模式介绍和应用场景 装饰器设计模式(Decorato...

  • 学习笔记:设计模式之装饰模式

    本文仅供学习交流使用,侵权必删。不作商业用途,转载请注明出处 WHAT 什么是装饰 装饰器就是通过分层对象来动态透...

  • 设计模式学习笔记——装饰器模式

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

网友评论

      本文标题:设计模式学习笔记——装饰模式

      本文链接:https://www.haomeiwen.com/subject/jdqiattx.html