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

结构型-装饰模式(Decorator)

时间:2024-05-11 14:31:12浏览次数:22  
标签:String 对象 装饰 phoneOperate PhoneOperate operate public Decorator 结构型

1. 简介

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

2. 定义

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

3. Demo

1)模拟一个创建手机的接口

public interface PhoneOperate {
    String operate();
}

2)实现这个接口

public class BasePhoneOperate implements PhoneOperate {
    @Override
    public String operate() {
        return "P70手机";
    }
}

被修饰类,这个实现类是真正做事的实现类

3)修饰类

//给手机加个色
public class ColorPhoneOperate implements PhoneOperate{
    private PhoneOperate phoneOperate;

    public ColorPhoneOperate(PhoneOperate phoneOperate){
        this.phoneOperate = phoneOperate;
    }

    @Override
    public String operate() {
        return "土豪金" + phoneOperate.operate();
    }
}

//给手机加个壳
public class EggPhoneOperate implements PhoneOperate {

    private PhoneOperate phoneOperate;

    public EggPhoneOperate(PhoneOperate phoneOperate){
        this.phoneOperate = phoneOperate;
    }

    @Override
    public String operate() {
        return "铝合金壳" + phoneOperate.operate();
    }
}

//给手机装上屏保
public class ScreenPhoneOperate implements PhoneOperate{

    private PhoneOperate phoneOperate;

    public ScreenPhoneOperate(PhoneOperate phoneOperate){
        this.phoneOperate = phoneOperate;
    }


    @Override
    public String operate() {
        return "装上屏保" + phoneOperate.operate();
    }
}

这里创建三个修饰类,作用就是对内部持有的产品进行一定的修饰。

4)模拟业务类

public class MainRun {
    public static void main(String[] args) {
        //只有这个是真正干事的
        BasePhoneOperate basePhoneOperate = new BasePhoneOperate();
        //这几个修饰类只起到点缀作用
        ColorPhoneOperate colorPhoneOperate = new ColorPhoneOperate(basePhoneOperate);
        EggPhoneOperate eggPhoneOperate = new EggPhoneOperate(colorPhoneOperate);
        ScreenPhoneOperate screenPhoneOperate = new ScreenPhoneOperate(eggPhoneOperate);

        System.out.println( basePhoneOperate.operate());
        System.out.println( colorPhoneOperate.operate());
        System.out.println( eggPhoneOperate.operate());
        System.out.println( screenPhoneOperate.operate());
    }
}

4. 使用场景

  1. Mybatis 的执行器 Executor 接口,二级缓存通过 CachingExecutor 实现,就是个缓存装饰类,真正执行 Sql 的是其内部持有的 Executor。这块刚开始好久看不懂是什么操作,后来悟了。

标签:String,对象,装饰,phoneOperate,PhoneOperate,operate,public,Decorator,结构型
From: https://www.cnblogs.com/cnff/p/18186410

相关文章

  • 【学习笔记】Python 装饰器
    装饰器是Python中一种非常强大的语法特性,它允许你在不改变函数代码的情况下,动态地增加功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。下面是Python装饰器的基本语法:defdecorator_function(original_function):defwrapper_function(*args,*......
  • Java学设计模式之装饰器模式
    一、模式概念1.1什么是模式装饰模式是一种结构型设计模式,它允许向现有对象动态添加新功能,同时又不改变其结构。装饰模式通过将对象放置在包装器类中,然后在运行时动态地向对象添加新的行为或责任,从而实现这一目的。结构装饰模式通常由以下几个部分组成:Component(组件):定义一......
  • Python高级之装饰器
    【一】装饰器【1】什么是装饰器装饰代指为被装饰对象添加新的功能,器代指器具/工具,装饰器与被装饰的对象均可以是任意可调用对象。装饰器的作用就是在不修改被装饰对象源代码和调用方式的前提下为被装饰对象添加额外的功能【2】装饰器的用途软件包含的所有功能的源代码以及......
  • 面向对象的三大特性、封装的介绍及属性、装饰器property、员工管理系统
    【一】面向对象的三大特性封装:封装指的就是把数据与功能都整合到一起继承多态【二】什么是封装封装是对具体对象的一种抽象意思就是将某部分功能和代码隐藏起来,在程序外边看不到,只能在程序内部使用【三】为什么要封装?封装数据的主要原因是:保护隐私(把不想别人......
  • 23种设计模式笔记-结构型模式
    23种设计模式-结构型模式笔记模板模式前提-模式:概念:规则:实现细节:应用场景:示意图:代码实现:创建型模式适配器、桥接、组合、装饰、外观、享元、代理。适配器模式-接口兼容思想概念:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一......
  • vue-property-decorator基础教程
    vue-property-decorator基础教程为什么要使用vue-property-decorator如何使用vue-property-decorator1.基本写法2.data中定义数据3.生命周期钩子函数4.方法5.@Component()6.@Prop()7.@PropSync()8.@Emit()9.计算属性10.@Watch()为什么要使用vue-property-decoratorvue-......
  • HarmonyOS 自定义装饰器
    1.引言在软件工程中,日志记录是监控和调试应用程序的重要工具。鸿蒙操作系统(HarmonyOS)支持自定义装饰器,这使得开发者可以方便地向类的方法添加日志记录功能。本文将介绍两个用于记录方法执行的自定义装饰器:LogMethod和logDecorator。2.装饰器基础装饰器是一种特殊类型的声明......
  • Python高阶--装饰器
    importtimedeftimer(func):defgf():start_time=time.time()func()end_time=time.time()print('func运行的时间为:',end_time-start_time)returngfdeffoo():time.sleep(3)print('infoo')foo=timer(foo)foo()以上等价于importtimedef......
  • python装饰器 - 理解与应用
    装饰器定义Python装饰器是一种高级功能,可以用来修改或扩展函数或类的行为。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。通过在函数定义前使用@符号和装饰器函数的名称,可以在不修改原函数代码的情况下对函数进行功能增强或修改。装饰器可以用来实现日志记......
  • python --多个叠加装饰器
    defdeco1(func1):defwrapper1(*args,**kwargs):print("运行deco1_wrapper1")res1=func1(*args,**kwargs)returnres1returnwrapper1defdeco2(func2):defwrapper2(*args,**kwargs):print("运行deco2_wra......