JAVA架构师之路八:设计模式之装饰器模式

装饰器模式是一种结构型设计模式,用于在不修改原有对象的基础上,动态地给对象添加新的功能。它提供了一种比继承更灵活的扩展对象功能的方式,适用于动态添加职责或扩展功能。文章通过实例展示了装饰器模式的使用,包括不使用装饰器模式的缺点、抽象继承的实现方式,以及如何使用装饰器模式实现JSON格式日志。同时,文章还比较了装饰器模式与代理模式的区别,装饰器更注重功能扩展,而代理模式侧重于代理过程的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA架构师之路七:设计模式之门面模式

无论乌鸦怎样用孔雀的羽毛来装饰自己,乌鸦毕竟是乌鸦。 —— 斯大林

日常生活中,我们去肯德基、麦当劳吃饭,我们会点很多东西,服务员会在他们的点餐系统选择你点的食物,然后总价和清单就出来了,那这个系统是怎么实现的呢?还有就是我们去饭店,点完餐,服务员也会给一个点餐列表和总金额。今天我们来聊下这种系统利用的一种重要的设计模式——装饰器模式

1. 装饰器模式

定义

装饰器模式也叫包装模式,是指在不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能)。
属于结构型设计模式。

适用场景

扩展一个类的功能或者给一个类添加职责。
动态的给一个对象添加功能,这些功能可以动态的撤销

优点

装饰器是继承的有力补充,比继承更灵活,不改变原有对象额情况下动态地给一个对象扩展功能,即插即用
通过使用不同装饰类以及这些装饰类的排列组合,可实现不同效果
装饰器完全遵守开闭原则

缺点

会出现更多的代码,更多的类,增加程序的复杂性
动态装饰时,多层装饰会更复杂

2. 不使用装饰器模式写法

public class JianBing {
   

    public String getMsg() {
   
        return "煎饼";
    }

    public int getPrice() {
   
        return 5;
    }
}
public class JianBingAddEgg extends JianBing {
   

    @Override
    public String getMsg() {
   
        return super.getMsg() + ",加鸡蛋";
    }

    @Override
    public int getPrice() {
   
        return super.getPrice() + 2;
    }
}
public class JianBingAddEggAndXiangchang extends JianBingAddEgg {
   
    @Override
    public String getMsg() {
   
        return super.getMsg() + ",加香肠";
    }

    @Override
    public int getPrice() {
   
        return super.getPrice() + 2;
    }
}
public class Test {
   

    public static void main(String[] args) {
   
        JianBing jianBing = new JianBing();
        System.out.println(jianBing.getMsg() + ",总价:" + jianBing.getPrice());

        JianBingAddEgg jianBing1 = new JianBingAddEgg();
        System
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值