设计模式六大原则之五:开闭原则

1 基本介绍

开闭原则(OCP:Open Closed Principle):一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。用抽象构建架构,用实现扩展细节。当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

2 案例演示

public class Exer {
    public static void main(String[] args) {
        Coach coach = new Coach();
        coach.execPlay(new Runner());
        coach.execPlay(new Jumper());
    }
}
class Coach {
    public void execPlay(Sportsman man) {
        if (man.playType == 1) {
            execRun(man);
        } else if (man.playType == 2) {
            execJump(man);
        }
    }
    public void execRun(Sportsman man) {System.out.println("去跑步");}
    public void execJump(Sportsman man) {System.out.println("去跳");}
}
class Sportsman {
    int playType;
}
class Runner extends Sportsman {
    int playType = 1;
}
class Jumper extends Sportsman {
    int playType = 2;
}

分析:
① 优点:简单易操作
② 违反开闭原则,即对扩展开放,对修改关闭。即当我们给类增加新功能时,尽量不要修改代码,或者尽可能少修改代码。

当我新增功能时上面的代码就会需要改动很多地方,优化:

public class Exer {
    public static void main(String[] args) {
        Coach coach = new Coach();
        coach.execPlay(new Runner());
        coach.execPlay(new Jumper());
        coach.execPlay(new Swimer());
    }
}
class Coach {
    public void execPlay(Sportsman man) {
        man.execPlay();
    }
    // public void execRun(Sportsman man) {System.out.println("去跑步");}
    // public void execJump(Sportsman man) {System.out.println("去跳");}
}
abstract class Sportsman {
    int playType;
    public abstract void execPlay();
}
class Runner extends Sportsman {
    public Runner {super.playType = 1;}
    @Override
    public void execPlay() {System.out.println("去跑步");}
}
class Jumper extends Sportsman {
    public Jumper {super.playType = 2;}
    @Override
    public void execPlay() {System.out.println("去跳");}
}
// 新增功能
class Swimer extends Sportsman {
    public Swimer {super.playType = 3;}
    @Override
    public void execPlay() {System.out.println("去游泳");}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑吧,高同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值