好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

优点

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

缺点

2.多层装饰比较复杂。

使用场景

1.扩展一个类的功能。

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

一、实现方式

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

1、每天生活的接口

?

1

2

3

4

5

6

7

8

9

10

package com.asurplus测试数据mon.decorator;

/**

  * 每天的生活接口

  */

public interface Live {

     /**

      * 每天需要做的事情

      */

     void live();

}

2、起床的实现类

?

1

2

3

4

5

6

7

8

9

10

11

12

package com.asurplus测试数据mon.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测试数据mon.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测试数据mon.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测试数据mon.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();

     }

}

输出结果

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

总结

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

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

查看更多关于Java中常用的设计模式之装饰器模式详解的详细内容...

  阅读:17次