Evil 域

当Evil遇上先知

导航

OO设计原则之OCP

Posted on 2007-09-26 09:00  Saar  阅读(625)  评论(0编辑  收藏  举报

OO设计原则之OCP
OPC——Open Closed Principle,即开-闭原则。其意义为:一个类应该对扩展开放(O)、对修改关闭(C)。
因为“变化”在软件设计中可以说是永远存在的,OCP的魅力在于,它可以在不修改现存的代码的基础上修改你的软件——多么诱人的东西啊。
显然,这一条设计原则可以分为两部分。关闭:因为类对于修改是关闭的,所以,要求一个类在完成之时,就必须可以独立的完成它所有的工作,即做到功能完整。这样,不出现特殊情况,它便不需要进行修改。开放:一旦出现特殊情况,必须修改类中部分功能的逻辑,以适应于特殊情况。
看到这里,您也许会说,这不是与关闭原则相违背了吗?呵呵,还记得前文写的OCP的魅力吗?(OCP的魅力在于,它可以在不修改现存的代码的基础上修改你的软件)呵呵,这样子就应该明了了,它不修改现有代码,但可以对现有代码进行重写。晕了没有?看一个具体的例子,就明了了。
在ASP.NET中,经常要用到文件上传的功能。于是,我们把结合上传组件形成的上传逻辑封装成一个类UploadFile:

以一个方法CanUpload()为例,此方法用于检查文件大小以及上传的文件的类型,返回一个布尔值确定是否可以上传。其实,它调用自己的两个方法:IsUploadSizeFit()和IsUploadTypeAllowed()。因此,对于它本身而言,它是关闭的,不作任何修改,它便可以完成上传的逻辑。
但是,对一不同的系统,考虑到功能、安全等因素,允许上传的文件大小以及文件类型是有区别的。此时,我们便可以对此类进行扩展。如下图中,UploadFileBLL类对UploadFile进行了一下继承,实现了IsUploadSizeFit()和IsUploadTypeAllowed()方法。

当然,继承只是OCP应用的一个方面。OCP应用广泛,在您现有的软件中,很可能不自觉的已经用上了OCP。