设计模式-开闭原则

什么是开闭原则?
一个软件实体应该对扩展开放,对修改关闭。这个原则说的是在设计一个模块时,应当使这个模块可以在不被修改的前提下被扩展。

满足开闭原则的应用的优势:
1.通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件有一定的适应性和灵活性。 
2.已有的软件模块,特别是最重要的抽象层模块不能被修改,这就使变化中的软件系统有一定的稳定性和延续性。
这就使得系统有高层级的复用和易于维护。

怎么做到开闭原则?
1.抽象化是关键
对于java这种面向对象的语言来讲,可以给系统定义一个一劳永逸、不再更改的抽象设计,此设计允许有无穷无尽的行为在实现层被实现。比如抽象类、或者接口,规定出所有实现类必须提供的方法的特征作为系统设计的抽象层。这个抽象层预见了所有可能的扩展,因此在任何情况下都不会改变。这就使得系统的抽象层不被修改,从而满足开闭原则的第二条:对修改关闭。
示例:
 long topicTotal(Query query);
在接口层定义查询话题总数的接口,接口的入參是Query对象,这样所有的查询话题总数都可以调用该接口,给不同的查询条件,查询不同条件的话题总数。如下接口中的修改方法同理:
 boolean updateTopic(String topicId, Update update);
2.对可变性的封装原则
(1) 一种可变性,不应当散落在代码的很多角落里,而应当被封装在一个对象里面。 
示例1如下枚举:
public enum UserPlatform {

    APP {//有效
        public String getValue() {
            return "app";
        }
    },
    WEB {//无效
        public String getValue() {
            return "web";
        }
    };

    public abstract String getValue();
}


如图可见,用户平台氛围app、web,可能后续会有pc应用,那么只需要扩展该枚举添加一个pc应用,这样来维护系统的可变性。
例如工厂模式中添加判断条件来扩展新的创建,不动原有逻辑,对代码进行扩展完成新的对象的创建。

ps:从开闭原则可以看出面向对象的重要原则就是创建抽象化,并从抽象化导出具体化。具体化可以给出不同版本,每一个版本都能给出不同的实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值