乍看起来,不能修改而可以扩展似乎是自相矛盾的。怎么可以同时又不修改、而又可扩展呢?在开始讨论之前,不妨考察一下《西游记》中,玉皇大帝在美猴王的挑战之下,是怎样维护天庭的秩序的。
玉帝招安闰猴王
当年大帝天宫时的美猴王便是玉帝天庭的新挑战。美猴王说:“‘皇帝轮流做,明年到我家。’只教他搬出去,将天宫让与我!”对于这项挑战,太白金星给玉皇大帝提出的建议是:“臣启陛下。。。降一道招安圣旨,把他宣来上界。。。与他籍名在箓。。。一则不动众劳师,二则收仙有道也。”
换言之,不劳师动众、不破坏天规便是“闭”,收仙有道便是“开”。招安之法便是玉帝天庭的“开-闭”原则,通过给美猴王一个“弼马温”的官职,便可使现有系统满足变化了的需求,而不必更改天庭的既有秩序,如下图所未。
招安之法的关键便是不允许更改现有的天庭秩序,但允许将娇儿纳入现有的秩序中,从而扩展了这一秩序。用面向对象的语言来讲,允许更改的是系统的抽象层,而允许扩展的是系统的实现层。
《太玄》论“固革”
西汉杨雄的《太玄》一书说:“知固而不知革,物失其则;知革而不知固,物失其均。”
一个系统对修改关闭,就是《太玄》所说的“固”;而系统对扩展开发,就是《太玄》所说的“革”。一个系统不可扩展,就是“物失其则”,或者说系统推动使用的价值;而一个系统动辄需要修改,便会“物失其均”,也就是失去重心。
因此,“开-闭”原则非常接近《太玄》一书所说的“固革”原则。
抽象化是关键
解决问题的关键在于抽象化。在像java语言这样的面向对象的编程语言里面,可以给系统宣言出一个一劳永逸、不再更改的抽象设计,此设计允许有无穷无尽的行为在实现层被实现。在java语言里,可以给出一个或多个抽象java类或java接口,规定出所有的具体类必须提供的方法的特征作为系统设计的抽象层。这个抽象层预见了所有的可能扩展,因此,在任何扩展情况下都不会改变。这就使得系统的抽象层不需修改,从而满足了“开-闭”原则的第二条,对修改关闭。
同时,由于从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的,这就满足了“开-闭”原则的第一条。关于在java语言中实现抽象化的方法,请阅读后面的“专题:java接口”一章和“专题:抽象类”一章。
转载自:IT连载在线。
http://www.zaixianzazhi.com/lz/ms/20110322/78.html
分享到:
相关推荐
java学习平台的设计与实现代码-java-springboot-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2 图片素材管理 20 5.3视频素材管理 21 5
多媒体素材库系统-多媒体素材库系统的设计与实现代码-java-springboot-管理系统-...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2 图片素材管
高校专业实习管理系统-高校专业实习管理系统的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2
反欺诈平台-反欺诈平台的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2 图片素材管理 20 5.3视
政府管理的系统-政府管理的系统的设计与实现代码-java-springboot-管理系统-...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2 图片素材管理 2
众筹系统-众筹系统的设计与实现代码-java-springboot-管理系统-...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2 图片素材管理 20 5.3视频素材
志同道合交友网站-志同道合交友网站的设计与实现代码-java-springboot-管理系统-...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2 图片素材管
博客系统-博客系统的设计与实现代码-java-springboot-管理系统-...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2 图片素材管理 20 5.3视频素材
疫情打卡健康评测系统-疫情打卡健康评测系统的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2
中国陕西民俗网-中国陕西民俗网的设计与实现代码-java-springboot-管理系统-...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2 图片素材管理 2
企业员工薪酬关系系统-企业员工薪酬关系系统的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2
交通管理在线服务系统-交通管理在线服务系统的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2
毕业就业信息管理系统-毕业就业信息管理系统的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2
科研项目验收管理系统-科研项目验收管理系统的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2
码头船只货柜管理系统-码头船只货柜管理系统的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2
名城小区物业管理系统-名城小区物业管理系统的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2
高校教师电子名片系统-高校教师电子名片系统的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2
信息技术知识竞赛系统-信息技术知识竞赛系统的设计与实现代码-java-springboot-管理系统-基于...第4章 系统设计 8 4.1系统整体结构 8 4.2系统功能设计 9 4.3数据库设计 9 第5章 系统的实现 20 5.1用户信息管理 20 5.2