美文网首页
设计模式整理(11) 装饰模式

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

作者: 安静的蓝孩子 | 来源:发表于2019-02-21 11:32 被阅读0次

学习《Android 源码设计模式解析与实践》系列笔记

介绍

装饰模式,也称包装模式,结构型设计模式之一。

定义

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。

使用场景

需要透明且动态地扩展类的功能时。

结构

装饰模式 UML 图
  • Component : 抽象组件。接口或抽象类,被装饰的原始对象。
  • ConcreteComponent : 组件具体实现类。
  • Decorator : 抽象装饰者,内部需要有一个组件对象的引用。
  • ConcreteDecorator : 具体的装饰者类。

实现

人穿衣服,衣服为装饰。

/**
 * 人的抽象,对应抽象的Component
 */
public abstract class Person {
    public abstract void dressed();
}
/**
 * 人的具体实现类,男孩,对应 ConcreteComponent 角色
 */
public class Boy extends Person {
    @Override
    public void dressed() {
        System.out.println("穿上底裤");
    }
}
/**
 * 装饰抽象类,对应 Decorator 角色
 */
public class PersonCloth extends Person {

    private Person mPerson;

    public PersonCloth(Person person) {
        mPerson = person;
    }

    @Override
    public void dressed() {
        mPerson.dressed();
    }
}
/**
 * 具体装饰实现类,便宜装扮
 */
public class CheapCloth extends PersonCloth {

    public CheapCloth(Person person) {
        super(person);
    }

    public void dressShorts() {
        System.out.println("穿条短裤");
    }

    @Override
    public void dressed() {
        super.dressed();
        dressShorts();
    }
}
/**
 * 具体装饰实现类,豪华装扮
 */
public class ExpensiveCloth extends PersonCloth {

    public ExpensiveCloth(Person person) {
        super(person);
    }

    private void dressShirt() {
        System.out.println("穿件短袖");
    }

    private void dressLeather() {
        System.out.println("穿件皮衣");
    }

    private void dressJean() {
        System.out.println("穿件牛仔裤");
    }

    @Override
    public void dressed() {
        super.dressed();
        dressShirt();
        dressLeather();
        dressJean();
    }
}
public class Client {

    public static void main(String args[]) {
        Person boy = new Boy();

        PersonCloth clothCheap = new CheapCloth(boy);
        clothCheap.dressed();

        PersonCloth clothExpensive = new ExpensiveCloth(boy);
        clothExpensive.dressed();
    }

}

总结

Android 源码中,ContextContextImpl 的实现就是使用了装饰模式。

装饰模式是对客户端透明的方式扩展对象的功能,是继承方式的一个替代方案。



相关文章:

设计模式整理(1) 代理模式
设计模式整理(2) 单例模式
设计模式整理(3) Builder 模式
设计模式整理(4) 原型模式
设计模式整理(5) 工厂模式
设计模式整理(6) 策略模式
设计模式整理(7) 状态模式
设计模式整理(8) 责任链模式
设计模式整理(9) 观察者模式
设计模式整理(10) 适配器模式
设计模式整理(11) 装饰模式
设计模式整理(12) 中介者模式

相关文章

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

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

  • 装饰器模式

    title: 装饰器模式date: 2021-11-05 13:58:21 前言 装饰器模式是一种结构型设计模式,...

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

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

  • 设计模式笔记汇总

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

  • 11.4设计模式-装饰模式-讲解

    设计模式-装饰模式 装饰模式详解 装饰模式在android中的实际运用,避免了耦合 1. 装饰模式详解 2.装饰模...

  • 设计模式

    设计模式 单例模式、装饰者模式、

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计

    JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计模式 装饰器模式,又名装饰者模式。它的定义是“在不...

  • 8种设计模式:

    主要介绍 单例设计模式,代理设计模式,观察者设计模式,模板模式(Template), 适配器模式,装饰模式(Dec...

  • iOS开发之设计模式 - 装饰模式

    由《大话设计模式 - 装饰模式》的OC和部分Swift的语言转义 装饰模式 继上一篇《策略模式》 装饰模式,动态地...

网友评论

      本文标题:设计模式整理(11) 装饰模式

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