Java设计模式-装饰器模式(Decorator)

简介: Java设计模式-装饰器模式(Decorator)

文章目录

前言

装饰器模式顾名思义,就是装饰,如出门需要化妆进行装饰一下,在一些正式的场合需要西装革履进行装饰。装饰器的意图是动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。本篇我们以装饰person举例进行说明装饰器模式。

一、装饰器

这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

使用的场景:1、扩展一个类的功能。 2、动态增加功能,动态撤销。

二、装饰器模式实现

比如,出门正常刷牙,洗头,换衣出门,但是今天太阳大,我们带哥墨镜,打个领带


e687d9c721b94f669ef39e2f316f2e5e.png

1.接口类

/**

* 正常外出需要

*/

public interface PersonOuter {

  void decorate();

}

2.实现类

/**

* 男孩出门

*/

public class BoyOuter implements PersonOuter{

   public void brushTeeth() {

       System.out.println("男孩出门刷牙");

   }

   public void washair() {

       System.out.println("男孩出门洗头");

   }

   public void changeClothes() {

       System.out.println("男孩出门换衣");

   }

   @Override

   public void decorate() {

       brushTeeth();

       washair();

       changeClothes();

   }

}

3.抽象装饰类

/**

*

*/

public abstract class PersonDecorator implements PersonOuter {

   //外出传入进行装饰

   private PersonOuter personOuter;

   //构造器

   public PersonDecorator(PersonOuter personOuter) {

       this.personOuter = personOuter;

   }

   @Override

   public void decorate() {

       personOuter.decorate();

   }

}

4.额外装饰

男孩出门需要墨镜

/**

* 墨镜装饰器

*/

public class SunGlassDecorator extends PersonDecorator {

   public SunGlassDecorator(PersonOuter personOuter) {

       super(personOuter);

   }

   @Override

   public void decorate() {

       sunGlass();

   }

   public void sunGlass(){

       System.out.println("出门带墨镜");

   }

}

领带:

/**

* 领带装饰器

*/

public class TieDecorator extends PersonDecorator{

   public TieDecorator(PersonOuter personOuter) {

       super(personOuter);

   }

   @Override

   public void decorate() {

       tie();

   }

   public void tie(){

       System.out.println("出门系领带");

   }

}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了装饰器使用,注意使用的场景, 使用的场景:1、扩展一个类的功能。 2、动态增加功能,动态撤销。

相关文章
|
4天前
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
19 4
|
2天前
|
设计模式 Java
设计模式在Java项目中的实际应用
设计模式在Java项目中的实际应用
|
2天前
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式
|
1天前
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式
|
2天前
|
设计模式 Java 容器
Java多线程编程中的设计模式与挑战
Java多线程编程中的设计模式与挑战
|
1天前
|
设计模式 Java
设计模式在Java项目中的实际应用
设计模式在Java项目中的实际应用
|
1天前
|
设计模式 安全 Java
从零开始:Java开发者的设计模式指南
从零开始:Java开发者的设计模式指南
|
5天前
|
安全 算法 Java
java多线程面试题2019整理
java多线程面试题2019整理
|
2天前
|
安全 Java
Java多线程编程实践中的常见问题与解决方案
Java多线程编程实践中的常见问题与解决方案
|
3天前
|
Java 数据处理 调度
Java多线程编程入门指南
Java多线程编程入门指南