白话设计模式-装饰器模式的使用和意义

本文通过一个英雄类的案例,介绍了装饰器模式的使用,如何避免违反开放-关闭原则。当需要给英雄添加皮肤、攻击力等属性时,使用装饰器模式能保持原有代码结构不变,方便扩展。通过实例展示了如何创建和组合装饰器,以实现灵活的类装饰。
摘要由CSDN通过智能技术生成

装饰器模式展示

在学习设计模式的过程中,将自己对于设计模式的理解,以最简单,最白话的方式,分享给大家。个人觉得,对于设计模式的理解,需要将他从最抽象的理论里,真实的代入到实际的业务场景中,将会有最深刻的理解。所以文章最有对这个设计模式的使用的拓展,讲述了背后的意义。

  • 场景一(先来假设一个最最最开始、最基本的模型基础)

    • 英雄(Hero)这个类只有名字属性

      那么这个类就很容易构造,在对外展示的时候,只需要调用display()方法,展示的就只有姓名了

      public abstract class Hero {
             
          
         protected String name;//名字
      
         Hero(String name) {
             
            this.name = name;
         }
         void display(){
             
            System.out.println("My name is :" + name);
         };
      
      }
      
      
      • 在这个类下生成两个实体类,叫Annie(安妮)和Gaylen(盖伦)
Hero
Gaylen
Annie

Gaylen(盖伦)

public class Gaylen extends Hero {
       
    Gaylen(){
   
        super("Gaylen");
    }
}

Annie(安妮)

public class Annie extends Hero {
   
    Annie() {
   
        super("Annie");
    }
}
  • 场景一的使用方法 非常的简单,简单的展示就好了

    	public static void main(String[] args) {
         
    		Hero gaylen = new Gaylen();
    		Hero annie = new Annie();
    		gaylen.display();
    		annie.display();
    	}
    

    输出结果也很容易

    My name is :Gaylen
    My name is :Annie
    

[================================================================================]

接下来进入主题

  • 场景二: 产品经理叫我新增一个叫做皮肤的属性

如果这个时候这个英雄出皮肤了(也就是可以换不同的外观了),我们们应该怎么改这个结构呢?

思考角度:其实按照普通的做法,我们就会直接在Hero类上面,增加一个 Clothes属性,然后在display()方法里面,将Clothes给加进展示就好了。

新增的clothes的类属性如下:

public abstract class Clothes {
   
    private String clothesName;//衣服名称
    void display()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值