首页 > 其他分享 >结构型模式-装饰模式

结构型模式-装饰模式

时间:2022-11-19 21:55:43浏览次数:48  
标签:tea void Component 模式 public component operation 装饰 结构型

一、装饰模式

Component类:抽象构件,给出一个抽象类(或接口),以规范准备接收附加责任或附加功能的对象

ConcreteComponent类:具体构件,定义一个将要接收附加责任或附加功能的对象

Decorator:抽象装饰类:持有一个构件(Component)对象的实例,并有一个与抽象构件一致的方法

ConcreteDecorator类:具体装饰类,负责给构件对象添加对应的新功能

  装饰者模式是动态地给一个对象添加一些额外的职责(功能),同时又不改变其结构。可以用来扩展一个类的功能,动态增加功能,动态撤销。

public class Client {
    public static void main(String[] args) {
        Component tea = new ConcreteComponent(); // 奶茶
        tea.operation(); // 一杯奶茶
        System.out.println();
        tea = new ConcreteDecoratorA(tea); // 加糖
        tea.operation(); // 一杯奶茶 + 一勺糖
        System.out.println();
        tea = new ConcreteDecoratorB(tea); // 加冰
        tea.operation(); // 一杯奶茶 + 一勺糖 + 一块冰
        System.out.println();
        tea = new ConcreteDecoratorA(tea); // 再加糖
        tea.operation(); // 一杯奶茶 + 一勺糖 + 一块冰 + 一勺糖
    }
}

// 抽象构件接口
interface Component {
    void operation();
}

// 具体构件
class ConcreteComponent implements Component {

    @Override
    public void operation() {
        System.out.print("一杯奶茶");
    }
}

// 抽象装饰类
abstract class Decorator implements Component {

    private Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void operation() {
        component.operation();
    }
}

// 具体装饰类A
class ConcreteDecoratorA extends Decorator {

    public ConcreteDecoratorA(Component component) {
        super(component);
    }

    @Override
    public void operation() {
        super.operation();
        addBehavior();
    }

    private void addBehavior() {
        System.out.print(" + 一勺糖");
    }

}

// 具体装饰类B
class ConcreteDecoratorB extends Decorator {

    public ConcreteDecoratorB(Component component) {
        super(component);
    }

    @Override
    public void operation() {
        super.operation();
        addBehavior();
    }

    private void addBehavior() {
        System.out.print(" + 一块冰");
    }
}

标签:tea,void,Component,模式,public,component,operation,装饰,结构型
From: https://www.cnblogs.com/hbjiaxin/p/16907300.html

相关文章

  • 100:@property装饰器_get和set方法
    ###@property装饰器@property可以将一个方法的调用方式变成“属性调用”。下面是一个简单的示例,让大家体会一下这种转变:#简单测试@propertyclassEmployee:@pr......
  • web开发模式和API接口
    1.web开发模式1前后端混合开发---前后端不分离返回html内容2.前后端分离#专注写json格式的数据xml页面静态化API接口......
  • 谈谈我工作中的23个设计模式
      序从基础的角度看,设计模式是研究类本身或者类与类之间的协作模式,是进行抽象归纳的一个很好的速成思路。后面阅读设计模式后,为了加深理解,对相关图片进行了描绘和微......
  • 【博学谷学习记录】超强总结,用心分享 | 单例设计模式总结
    单例设计模式单例模式(SingletonPattern)涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不......
  • Java进阶篇——设计模式
    设计模式一、代理模式使用代理类对真实对象进行代理,包括真实对象方法的调用、功能的扩展等。访问的时候也只能访问到代理对象,既保护了真实对象同时可以在原始对象上进行......
  • LVS负载均衡集群--DR模式
    一、LVS-DR集群介绍LVS-DR(LinuxVirtualServerDirectorServer)工作模式,是生产环境中最常用的一种工作模式。1、LVS-DR工作原理LVS-DR模式,DirectorServer作为群......
  • Ansible ad-hoc模式及常用模块
    Ansibleadhoc模式基本语法:ansible{主机名/主机地址/主机组}[-m模块名][-a模块参数]-m模块名指定使用的模块名称-a模块参数列表指定模块执行操作时的参数,参......
  • React的5种高级模式
    本文概述了5种现代高级React模式,包括集成代码、优点和缺点,以及在公共库中的具体用法。像每个React开发者一样,你可能已经问过自己以下问题之一我如何建立一个可重复使用......
  • 学习wpf笔记3 MVVM模式——【转】C# WPF简单的MVVM模式事例
    一、前言WPF中使用MVVM模式开发有诸如以下优点:1.结构清晰明朗,上手成本低,一个新人也能快速的定位自己需要改动代码的位置。2.耦合度低,更改WPF控件不影响数据结构,更......
  • 04.从架构层面看设计模式(2)
                                     ......