Ocp

来源:互联网 发布:淘宝hd版本无法登陆 编辑:程序博客网 时间:2024/04/19 07:07

 

一、OCP 开放封闭原则(Open Closed Principle)
     Software entitied(classes,modules,functions,etc.) should be open for extension,but colosed for     modification.
     软件实体应当对扩展开放,对修改关闭,即软件实体应当在不修改的前提下扩展。
     Open for extension:当新需求出现的时候,可以通过扩展现有模型达到目的。   
     Close for modification:对已有的二进制代码,如dll,则不允许做任何修改。
二、使用Template Method实现OCP

 


public abstract class Policy
{
    
private int[] i =1123412341234132 };
    
public bool Sort()
    {
        SortImp();
    }
    
protected virtual bool SortImp()
    {
 
    }
}
 
class Bubbleimp : Policy
{
    
protected override bool SortImp()
    {
        
//冒泡排序
    }
}
class Bintreeimp : Policy
{
    
protected override bool SortImp()
    {
        
//二分法排序
    }
}
 
//主函数中实现
static void Main(string[] args)
{
    
//如果要使用冒泡排序,只要把下面的Bintreeimp改为Bubbleimp
    Policy sort = new Bintreeimp();
    sort.Sort();
}

 

三、OCP优点:
1、降低程序各部分之间的耦合性,使程序模块互换成为可能;
2、使软件各部分便于单元测试,通过编制与接口一致的模拟类(Mock),可以很容易地实现软件各部分的单元测试;
3、利于实现软件的模块的呼唤,软件升级时可以只部署发生变化的部分,而不会影响其它部分;
 
四、使用OCP注意点:
1、实现OCP原则的关键是抽象;
2、两种安全的实现开闭原则的设计模式是:Strategy pattern(策略模式),Template Methord(模版方法模式);
3、依据开闭原则,我们尽量不要修改类,只扩展类,但在有些情况下会出现一些比较怪异的状况,这时可以采用几个类进行组合来完成;
4、将可能发生变化的部分封装成一个对象,如: 状态, 消息,,算法,数据结构等等 , 封装变化是实现"开闭原则"的一个重要手段,如经常发生变化的状态值,如温度,气压,颜色,积分,排名等等,可以将这些作为独立的属性,如果参数之间有关系,有必要进行抽象。对于行为,如果是基本不变的,则可以直接作为对象的方法,否则考虑抽象或者封装这些行为;
5、在许多方面,OCP是面向对象设计的核心所在。遵循这个原则可带来面向对象技术所声称的巨大好处(灵活性、可重用性以及可维护性)。然而,对于应用程序的每个部分都肆意地进行抽象并不是一个好主意。应该仅仅对程序中呈现出频繁变化的那部分作出抽象。拒绝不成熟的抽象和抽象本身一样重要;

原创粉丝点击