软件设计原则-开闭原则

本文通过LOL皮肤设计的例子,阐述了开闭原则——对扩展开放,对修改关闭。利用抽象类AbstractSkin,创建了DefaultSkin和MetalGearSkin两个具体皮肤类,英雄类YasuoHero依赖于抽象类,实现了更换皮肤时无需修改原有代码,保证了代码的可扩展性和维护性。
摘要由CSDN通过智能技术生成

1.1 开闭原则

对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。

想要达到这样的效果,我们需要使用接口和抽象类。

因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。

下面以 LOL 的皮肤为例介绍开闭原则的应用。

【例】LOL 的皮肤设计。

分析:每个英雄都有自己的皮肤,这些皮肤有共同的特点,可以为其定义一个抽象类(AbstractSkin),而每个具体的皮肤(DefaultSkin和MetalGearSkin)是其子类。英雄类想要使用那个皮肤,只需要依赖皮肤的抽象类,用抽象类去接受子类,调用子类的方法,这样每次更改皮肤,就不用去改英雄类了,、而不需要修改原代码,所以它是满足开闭原则的。

 

 皮肤接口:

public abstract class AbstractSkin {

    /*
        显示皮肤类
     */
    public abstract void display();

}

默认皮肤:

public class DefaultSkin extends AbstractSkin{


    @Override
    public void display() {
        System.out.println("默认皮肤类");
    }
}

合金装备皮肤:

public class MetalGearSkin extends AbstractSkin{


    @Override
    public void display() {
        System.out.println("合金装备亚索");
    }
}

英雄类:

public class YasuoHero {

    private AbstractSkin skin;

    public void setSkin(AbstractSkin skin){
        this.skin = skin;
    }

    public void display(){
        skin.display();
    }

}

测试类:

public class Client {

    public static void main(String[] args) {
        //1、创建英雄亚索
        YasuoHero yasuo = new YasuoHero();
        //2、创建皮肤对象
//        DefaultSkin skin = new DefaultSkin();
        MetalGearSkin skin = new MetalGearSkin();
        yasuo.setSkin(skin);
        yasuo.display();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

i进击的攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值