设计原则-开闭原则

开闭原则 Open-Closed-Principle

定义

  • 对实体的扩展行为开放,对修改行为关闭;
  • 核心思想是面向抽象编程,用抽象构建框架,用实现扩展细节

举例

初始场景

玩家 Player 有获得经验的方法addExperience:

public interface Player {

    /**
     * 新增经验
     */
    void addExperience(int experience);
    
}

@ToString
public class PlayerImpl implements Player {

    private final String name;
    private int experience;

    public PlayerImpl(String name) {
        this.experience = 0;
        this.name = name;
    }

    @Override
    public void addExperience(int experience) {
        this.experience = this.experience + experience;
    }

}

现在新增一个需求,活动期间经验翻倍,那么如果是为了快速实现,于是直接修改addExperience方法:

public void addExperience(int experience) {
    this.experience = this.experience + experience * 2;
}

思考一下,修改后的addExperience方法的功能已经失去它原有的意义

场景优化

新增addActiveExperience方法,以遵循开闭原则:

public class ActivePlayer extends PlayerImpl{

    public ActivePlayer(String name) {
        super(name);
    }

    public void addActiveExperience(int experience) {
        super.addExperience(experience * 2);
    }
}

个人心得

  • 开闭原则是面向对象编程最基础的原则,指导我们构建稳定灵活的系统
  • 在面临细节实现时,应当尽量避免修改原来的细节,而是扩展的形式
  • 这考验一个人对于事物规律总结和归纳的能力,不论是开发还是现实,每一步细节都应以更高的视角去思考、兼顾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值