java设计模式_开放封闭原则

一、什么是开放封闭原则

开放封闭原则(Open-Closed Principle):一个软件实体 应当对扩展开放,则修改关闭。
在设计一个模块时,应当使得这个模块可以在不被修 改的前提下被扩展。也就是说,应当可以在不必修改源 代码的情况下修改这个模块的行为。
设计的目的便在于面对需求的改变而保持系统的相对 稳定,从而使得系统可以很容易的从一个版本升级到另 一个版本。

二、怎样做到开放封闭原则

实际上,绝对封闭的系统是不存在的。无论模块是怎 么封闭,到最后,总还是有一些无法封闭的变化。而我
们的思路就是:既然不能做到完全封闭,那我们就应该 对那些变化封闭,那些变化隔离做出选择。我们做出选
择,然后将那些无法封闭的变化抽象出来,进行隔离, 允许扩展,尽可能的减少系统的开发。当系统变化来临 时,我们要及时的做出反应。
我们并不害怕改变的到来。当变化到来时,我们首 先需要做的不是修改代码,而是尽可能的将变化抽象出 来进行隔离,然后进行扩展。面对需求的变化,对程序 的修改应该是尽可能通过添加代码来实现,而不是通过 修改代码来实现。
实际上,变化或者可能的变化来的越早,抽 象就越容易,相对的,代码的维护也就越容易; 而当项目接近于完成而来的需求变化,则会使抽
象变得很困难——这个困难,并不是抽象本身的 困难,抽象本身并没有困难,困难在于系统的架构已经完成,修改牵扯的方面太多而使得抽象
工作变得很困难。

三、繁忙的银行业务员

这里写图片描述

四、轻松的银行业务员

这里写图片描述

1.通过扩展已有的软件系统,可以提供新的行 为,以满足对软件的新需求,是变化中的软件有 一定的适应性和灵活性。
2.已有的软件模块,特别是最重要的抽象模 块不能再修改,这就使变化中的软件系统有一定 的稳定性和延续性。

//示例1:
/*
 * 银行业务员
 */
public class BankWorker {

    //负责存款业务
    public void saving(){
        System.out.println("进行存款操作");
    }

    //负责取款业务
    public void drawing(){
        System.out.println("进行取款操作");
    }

    //负责转账业务
    public void zhuanzhang(){
        System.out.println("进行转账操作");
    }

    //负责基金的申购
    public void jijin(){
        System.out.println("进行基金申购操作");
    }

}

public class MainClass {

    public static void main(String[] args) {
        BankWorker bankWorker = new BankWorker();
        //存款
        bankWorker.saving();

        //取款
        bankWorker.drawing();

        //转账
        bankWorker.zhuanzhang();

        //基金
        bankWorker.jijin();
    }
}

//进行存款操作
//进行取款操作
//进行转账操作
//进行基金申购操作

//示例2:
/*
 * 银行业务员接口,是所有银行业务员的抽象父类.
 */
public interface BankWorker {

    void operation();

}
/*
 * 负责存款业务的业务员
 */
public class SavingBankWorker implements BankWorker {

    @Override
    public void operation() {
        System.out.println("进行存款操作");
    }

}
/*
 * 负责取款业务的业务员
 */
public class DrawingBankWorker implements BankWorker {

    @Override
    public void operation() {
        System.out.println("进行取款操作");
    }

}

/*
 * 负责转账业务的业务员
 */
public class ZhuanZhangBankWorker implements BankWorker {

    @Override
    public void operation() {
        System.out.println("进行转账操作");
    }

}

public class JiJinBankWorker implements BankWorker {

    @Override
    public void operation() {
        System.out.println("进行基金申购操作");
    }

}
public class MainClass {

    public static void main(String[] args) {
        BankWorker bankWorker = new SavingBankWorker();
        bankWorker.operation();

        BankWorker bankWorker2 = new DrawingBankWorker();
        bankWorker2.operation();

        BankWorker bankWorker3 = new ZhuanZhangBankWorker();
        bankWorker3.operation();

        BankWorker bankWorker4 = new JiJinBankWorker();
        bankWorker4.operation();
    }
}


//进行存款操作
//进行取款操作
//进行转账操作
//进行基金申购操作



















  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值