一、设计在软件开发中的重要性
重要性
在上大学的时候我们总是不理解为什么要讲这么理论性的东西,当时就一个感觉就是没什么用,我们更想去学习一些可以看到结果的东西,当你毕业之后就会发现基础的知识是多么重要,而这些知识都有一个共性就是可以脱离具体的技术或者问题而存在,是一种可以长期指导我们学习和进步的重要思想,设计原则和模式就是软件开发中的这种思想。
设计原则
我们先来思考一个问题:
怎么样的软件才算一个好的软件或者说对于程序员我们如何评价他(她)的编码技术?
我们来假设一个项目是由某个程序员独立去完成的,他做的事情不仅仅编码这么简单,编写实现功能的代码只占整个项目的30%都不到,他首先做的就应该是对整个项目的技术选择和框架设计(需求的学习和理解暂且不考虑),接下来才是正式编写代码,在实现过程中又需要多次的测试和修改(重构),这样就够了吗?如果能做到这些是可以开发出一个完整的软件,但是还不够。软件工程和盖房子有所区别的地方就在这里,房子盖好就不需要拆了重盖了,软件开发中我们还需要考虑到日后的迭代和变更,所以我们要做到整个结构有一个好的可维护性,设计原则是什么?设计原则就是指导我们实现这种结构的理论基础(也可以说是思想)。
设计模式
好了,设计原则有了,我也知道了应该遵循什么原则了,接下来怎么办?我该如何去在实际工程中运用这样的原则?设计模式就是为了解决这些问题而出现的,说白了设计模式就是我们智慧的老前辈们总结出来一些遵循六大设计原则的面向对象的实际应用方式。我们学会了这些设计模式可以使我们更加理解到设计原则的重要性,而设计原则也能帮助我们记忆和灵活应用各种设计模式。
二、六大设计原则
单一职责原则
单一职责原则的英文名称Single Responsibility Principle,简称SRP,单一职责的定义是:There should never be more than one reason for a class to change.(应该有且仅有一个原因引起类的变更)。
这个原则就是知道我们如何去封装一个对象(或者说如何去划分和定义类),“万物皆对象”这句话表明,任何事物都是对象,如何定义一类事物,完全由我们自己的需要决定。单一职责原则就是说明我们在定义(或者叫划分)一个类的时候应该尽可能的让他做一件事情,看起来这个原则很简单,但是问题恰恰就出在这个简单的“一件事情”上,如何来区分是一件事情就是一个问题?举个例子来说
/**
* 电话接口
* @author PeggyTong
*
*/
public interface IPhone {
//拨打电话
public void dial(String phoneNumber);
//通话
public void chat(Object obj);
//挂断电话
public void hangup();
}
上面这接口看起来没有什么问题,它就是做一件事情打电话(看成我们的手机),但是如果我们这里把一件事情定义成单纯的拨打电话,那么它又不是在做一件事情,所以说这里的单一职责要根据我们具体的业务逻辑来定,而不是越小越好的。
单一职责有什么作用呢?
1、类的复杂性降低,实现什么职责都有清晰明确的定义。
2、可读性提高,复杂性降低所以提高了可读性。
3、可维护性提高。
4、变更引起的风险降低,一个接口的修改只对相应的实现类有影响,对其他接口无影响。
其实在软件开发中单一职责不仅仅对于类和接口是这样,对于方法的定义也应该见名知其意(做一件事)。
里氏替换原则
(本文出自水寒的CSDN博客:http://blog.csdn.net/dawanganban)
第一种定义:If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substitut