六大设计原则之开-闭原则

一、开-闭原则的定义:一个软件实体应当对扩展开放、对修改关闭,即一个软件应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化的。

二、开-闭原则的地位:开-闭原则是面向对象的可复用设计的基石,其他设计原则(里氏代换原则、依赖倒转原则、合成/复用原则、迪米特法则、接口隔离原则)都是实现开-闭原则的手段和工具。

当然以上都是一些官话,这里说一下自己浅显的理解就是,“开闭原则就是在应用层和具体层中间添加一层抽象层”。这个理解对某些情况是不太对的。
下面是体现开-闭原则的例子:

那天上讨论开-闭原则的课时,有个同学说接口不能定义属性,疑惑从来没听说过,后来上网查了一下,这个说法并不准确。Java的接口是可以定义属性的,但接口里的属性等同于常量,只能读不能写,因为有两点,一是接口里定义属性默时认的修饰词是public static final,二是因为有final修饰词修饰,所以在定义的时候必须初始化。
相反,接口里面不能定义变量。接口的这个特点就很好的体现了开-闭原则。看下面的代码:

public abstract class AbstractClass 
{
    public static int a; 
}
public class Abstract1 extends AbstractClass  
{
    public static void main(String[] args) 
    {
        AbstractClass.a++;
        System.out.println(AbstractClass.a);
    }
}

Abstarct1类的主方法最终输出的结果是1。
从中可以看出,抽象类的子类可以通过AbstractClass.a++改变父类的属性。如果接口也可以这样,那么接口和抽象类没什么区别。
所以接口对属性修改的关闭,对属性和方法的扩展开放,本身就是对开-闭原则的一种体现。所以会变化的东西不应该放在接口中,而是应该放在具体实现中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值