面向对象设计模式Solid设计原则

时间:2022-10-01 19:18:28

今天学习到了面向对象设计(Object Oriented Design)6个原则,取他们的首字母拼成solid来方便记忆,又因为l是重复的所以只记一个。

下面分述一下我对这六个原则的理解,才疏学浅难免有不足之处,希望各位朋友不吝赐教。

1.S---Single Responsibility Principle即单一责任原则

比较官方的说法是说一个类发生变化的原因应该是唯一的。我认为该原则主要强调一个类应该只负责一部分相联系的功能。但是所谓的相联系”,

其联系程度究竟有多紧密呢?个人的拿捏程度不同,也不能说谁的程度拿捏的最好。但是我们肯定明白不能把八竿子打不着的功能放在一个类中实现。

2.O---Open Closed Principle即开闭原则

书面的说法是,对扩展开放,对修改封闭。简言之,就是写过的代码,尽量不改,只是需要加新功能的时候去扩充它。但我觉得这是一种美好的愿望,

尤其当你碰到一个很不负责的产品经理的时候,他不会考虑返工的代价,一茬接一茬的满足客户无理需求,发现最后要么少东西,要么逻辑不对,改的

东西海了去了。。。哼哼,有点跑偏了,总之,作为程序员我们自己写东西的时候还是要思考全面,为将来程序的可扩展性做好准备,同时也能确保程

序正确而不至于后期返工大修大改。

3.L1---Liskov Substitution Principle即里氏替换原则 

里氏替换原则简单的说,需要父类出现的地方子类出现了是绝对正确的,龙生龙,凤生凤,老鼠生的会打洞。

这里就牵扯到OOP(面向对象编程)语言中几个比较重要的概念。

a.override重写,这发生在子类继承父类的时候,重新实现父类的函数时

classA

{

public:

    A(){}

    virtual void foo()

    {

        cout<<"ThisisA."<<endl;

    }

};

 

classB:publicA

{

public:

    B(){}

    void foo()

    {

        cout<<"ThisisB."<<endl;

    }

};

 

b.overload重载,这发生在一个类中的多个同名函数,但是他们的参数列表不同,在函数调用时会根据你的参数列表来决定调用哪个函数,这叫重载

classA{

public:

    int add(int a,int b){

        return a+b;

    }

    double add(double a,double b){

        return a+b;

    }

};

 

c.polymorphism多态

多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。从程序设计的角度而言,多态可以这样来实现(以java语言为例):

public interface Parent//父类接口

{

    public void simpleCall();

}

public class Child_A implements Parent

{

    public void simpleCall();

    {

    //具体的实现细节;

    }

}

 

public class Child_B implements Parent

{

    public void simpleCall();

    {

    //具体的实现细节;

    }

}

 

//当然还可以有其他的实现

然后,我们就可以看到多态所展示的特性了:

Parent pa = new Child_A();

pa.simpleCall()则显然是调用Child_A的方法;

Parent pa = new Child_B();

pa.simpleCall()则是在调用Child_B的方法。所以,我们对于抽象的父类或者接口给出了我们的具体实现后,pa 可以完全不用管实现的细节,只访问我们定义的方法,就可以了。事实上,这就是多态所起的作用,可以实现控制反转这在大量的J2EE轻量级框架中被用到,比如Spring依赖注入机制。

4.L2---Law Of Demeter || Least Knowledge Principle即迪米特法则或最小知识原则

这个原则我认为强调的是低耦合,即一个类对其他类的实现什么的知道的越少越好。

5.I---Interface Segregation Principle即接口隔离原则

如果说单一责任原则强调的是什么样,接口隔离原则则强调的是怎么用,接口隔离,分两步。一,不该用的接口不用。二,满足条件的接口选规模最小的。

6.D---Dependency Inversion Principle即依赖倒置原则

主要强调两个方面:1.高层不依赖低层,它们都该依赖于抽象。2.具体依赖于抽象,抽象不依赖于具体。其实归根结底还是第二点,我们编程应该是考虑抽象的去编程。具体实现是具体实现的事。只要抽象的接口定义好就是成功的。

 

这种东西说来说去没做过几个项目还是没感觉,像我这样缺乏项目经验的人就云里雾里的。总结的东西希望在将来实战中遇到他们的时候可以会心一笑