Java23种设计模式七大原则--开闭原则

目录

一.定义:

二.作用: 

1.对软件测试的影响

2.可以提高代码的可复用性

3.可以提高软件的可维护性

三.实现方法:

四.代码演示

1.基类父类抽象:

2.子类主题实现

3.最终产品组装类:

4.调用测试

5.结果


一.定义:

开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:

软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。

 

二.作用: 

1.对软件测试的影响

软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常运行。

2.可以提高代码的可复用性

粒度越小,被复用的可能性就越大;在面向对象的程序设计中,根据原子和抽象编程可以提高代码的可复用性。

3.可以提高软件的可维护性

遵守开闭原则的软件,其稳定性高和延续性强,从而易于扩展和维护。

 

三.实现方法:

例子:Windows主题组合实现

“抽象约束,封装变化”,定义一个稳定的抽象类作为一个基类(主题类),该基类包含抽象方法(设置主题方法),子类实现基类的主题方法,最后定义一个最终产品,进行主题的组装。

开闭原则,可以很好的在不改变或者改变极少原有逻辑的条件下进行业务的拓展。

 

四.代码演示

1.基类父类抽象:

package com.zking.design.opc;

/**
 * @description: 开闭原则--基类
 * @author: codinglife
 * @time: 2021/5/6 10:45
 */
public abstract class Subject {
    /**
     * 主题基类抽象接口,具体主题子类继承实现
     * @param
     */
    public abstract void setSubject();
}

2.子类主题实现

package com.zking.design.opc;

/**
 * @description: 开闭原则--Windows颜色
 * @author: codinglife
 * @time: 2021/5/6 10:35
 */
public class WindowsColorSubject extends Subject{
    @Override
    public void setSubject() {
        System.out.println("我是Windows颜色");
    }
}
package com.zking.design.opc;

/**
 * @description:开闭原则--Windows声音
 * @author: codinglife
 * @time: 2021/5/6 10:51
 */
public class WindowsVoiceSubject extends  Subject{
    @Override
    public void setSubject() {
        System.out.println("我是Windows声音");
    }
}

3.最终产品组装类:

package com.zking.design.opc;

/**
 * @description: 开闭原则--Windows产品组装类
 * @author: codinglife
 * @time: 2021/5/6 10:33
 */
public class WindowsSubject {

    /**
     * Windows主题接口
     * @param s 抽象基类对象
     */
    public void subject(Subject s){
        s.setSubject();
    }


}

4.调用测试

package com.zking.design.opc;

/**
 * @description:
 * @author: codinglife
 * @time: 2021/5/6 10:54
 */
public class SubjectMain {

    public static void main(String[] args) {
        WindowsSubject windowsSubject= new WindowsSubject();
        //Windows颜色
        windowsSubject.subject(new WindowsColorSubject());
        //Windows声音
        windowsSubject.subject(new WindowsVoiceSubject());
    }


}

5.结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值