服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java中常用的设计模式之装饰器模式详解

Java中常用的设计模式之装饰器模式详解

2022-08-04 10:59Asurplus、 Java教程

这篇文章主要为大家详细介绍了Java中常用的设计模式之装饰器模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

优点

1.装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点

2.多层装饰比较复杂。

使用场景

1.扩展一个类的功能。

2.动态增加功能,动态撤销。

一、实现方式

假设一个场景,我们房间每天起床都要刷牙, 睡觉也要刷牙,刷牙的动作就是一个装饰器的作用,这样更利于我们的口腔健康。接下来我们就看看具体的装饰器如何实现。

1、每天生活的接口

?
1
2
3
4
5
6
7
8
9
10
package com.asurplus.common.decorator;
/**
 * 每天的生活接口
 */
public interface Live {
    /**
     * 每天需要做的事情
     */
    void live();
}

2、起床的实现类

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
 * 起床实现类
 */
@Slf4j
public class GetUpLive implements Live {
    @Override
    public void live() {
        log.info("起床了");
    }
}

3、睡觉的实现类

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
 * 睡觉实现类
 */
@Slf4j
public class SleepLive implements Live {
    @Override
    public void live() {
        log.info("睡觉了");
    }
}

4、装饰器类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.asurplus.common.decorator;
import lombok.extern.slf4j.Slf4j;
/**
 * 装饰器类
 */
@Slf4j
public class LiveDecorator {
    private Live live;
    public LiveDecorator(Live live) {
        this.live = live;
    }
    public void live() {
        // 生活
        live.live();
        // 刷牙
        brushTeeth();
    }
    private void brushTeeth() {
        log.info("刷牙去咯");
    }
}

二、测试

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.asurplus.common.decorator;
/**
 * 装饰器模式
 */
public class TestMain {
    public static void main(String[] args) {
        // 起床
        LiveDecorator getUp = new LiveDecorator(new GetUpLive());
        getUp.live();
        System.out.println();
        // 睡觉
        LiveDecorator sleep = new LiveDecorator(new SleepLive());
        sleep.live();
    }
}

输出结果

Java中常用的设计模式之装饰器模式详解

可以看出,起床和睡觉,都刷了牙,从而实现了我们的装饰器模式。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!  

原文链接:https://lizhou.blog.csdn.net/article/details/123152191

延伸 · 阅读

精彩推荐