设计模式原则 - 开闭原则(Open Closed Principle,OCP)

个人理解 ,随手写下的笔记。不足之处,请谅解。

定义

(1)对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。
(2)对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。

问题

任何软件都需要面临一个很重要的问题,即它们的需求会随时间的推移而发生变化。当软件系统需要面对新的需求时,我们应该尽量保证系统的设计框架是稳定的。如果一个软件设计符合开闭原则,那么可以非常方便地对系统进行扩展,而且在扩展时无须修改现有代码,使得软件系统在拥有适应性和灵活性的同时具备较好的稳定性和延续性。随着软件规模越来越大,软件寿命越来越长,软件维护成本越来越高,设计满足开闭原则的软件系统也变得越来越重要。

解决方式

为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。在很多面向对象编程语言中都提供了接口、抽象类等机制,可以通过它们定义系统的抽象层,再通过具体类来进行扩展。如果需要修改系统的行为,无须对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。

Java例子

/**
 * 抽象类图标
 */
public abstract class AbsChat {
    public void display() {
        System.out.println("AbsChat");
    }
}
/**
 * 柱状图
 */
public class BarChat extends AbsChat {
    @Override
    public void display() {
        System.out.println("BarChat");
    }
}
/**
 * 饼图
 */
public class PieChat extends AbsChat {
    @Override
    public void display() {
        System.out.println("PieChat");
    }
}
/**
 * 系统调用图型显示
 */
public class ChatDisplay {
    private AbsChat chat = null;
    public ChatDisplay(AbsChat chat) {
        this.chat = chat;
    }
    public void setChat(AbsChat chat) {
        this.chat = chat;
    }
    public void display() {
        chat.display();
    }
}
/**
 * 系统调用相应的图型显示
 */
public class TestDemo {
    public static void main(String[] args) {
        //修改系统代码的时候替换BarChat就好了,如果使用Spring框架替换Bean配置就好了,不用修改代码,直接添加代码就好了
        AbsChat chat = new BarChat();
//        AbsChat chat = new PieChat();
        ChatDisplay chatDisplay = new ChatDisplay(chat);
        chatDisplay.display();
    }
}

参考

百度百科:开闭原则
面向对象设计原则之开闭原则
设计模式六大原则(6):开闭原则

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式之六大原则(转载) 关于设计模式的六大设计原则的资料网上很多...
    霄霄霄霄阅读 911评论 0 1
  • 转载标注声明:http://www.uml.org.cn/sjms/201211023.asp 目录:[设计模式六...
    Bloo_m阅读 739评论 0 7
  • 前言 设计模式六大原则网上资料比较多比较乱,本文将网上的一些好的资料做一下整理,以便随时翻阅。友情提示,设计模式虽...
    简单的土豆阅读 1,457评论 0 10
  • 设计模式六大原则 设计模式六大原则(1):单一职责原则 定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类...
    viva158阅读 784评论 0 1
  • 设计模式六大原则(1):单一职责原则 定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 ...
    Jabir_Zhang阅读 659评论 0 3