设计模式目的
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
打个比方就像盖大厦和小木屋,当功能简单,函数和代码少时,我们能较轻松的直接上手;但如果是像大厦那样,功能复杂,需求可能变化且代码量大时,我们就不能直接上手就来,需要像建筑图纸那样提前规划设计,那设计模式就像软件(程序)的建筑图纸。
设计模式的目的是为了让软件(程序)具有更好的:
代码重用性
相同功能的代码,不用多次编写,降低冗余
可读性
编程规范性, 便于其他程序员的阅读和理解
可扩展性
当需要增加新的功能时,非常的方便,也称为可维护性
可靠性
当我们增加新的功能后,对原来的功能没有影响
使程序呈现高内聚,低耦合的特性
模块内部紧密,但模块间依赖小,一者出错不影响他者面向对象四大好处:可维护、可扩展、可复用、灵活性好。
单一职责原则
单一职责原则(Single responsibility principle),即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,以可能造成职责2执行错误,所需要将类A的粒度分解为A1、A2。
单一职责原则注意事项和细节
(1)降低类的复杂度,一个类只负责一项职责。
(2)提高类的可读性,可维护性
(3)降低变更引起的风险
(4)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则
代码示例
以交通工具的使用为例:
方案1,违法单一职责原则
public class SingleResponsibility1 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("汽车");
vehicle.run("摩托");
vehicle.run("飞机");
}
}
//方案1,违法单一职责原则
class Vehicle{
public void run(String vehicle){
System.out.println(vehicle+"在公路上行驶");
}
}
方案2,遵守单一职责原则,但是改动很大,要将类分解,且修改客户端
public class SingleResponsibility2 {
public static void main(String[] args) {
RoadVehicle roadVehice = new RoadVehicle();
roadVehice.run("汽车");
roadVehice.run("摩托");
AirVehicle airVehicle = new AirVehicle();
airVehicle.run("飞机");
}
}
//方案2,遵守单一职责原则,但是改动很大,要将类分解,且修改客户端
class RoadVehicle{
public void run(String vehicle){
System.out.println(vehicle+"在公路上行驶");
}
}
class AirVehicle{
public void run(String vehicle){
System.out.println(vehicle+"在天空上行驶");
}
}
方案3,没有对原来类做大的修改,只是增加方法,虽然没有在类这个级别上遵守单一职责原则,但在方法级别上仍然遵守单一职责原则
public class SingleResponsibility3 {
public static void main(String[] args) {
Vehicle2 vehicle = new Vehicle2();
vehicle.run("汽车");
vehicle.run("摩托");
vehicle.runAir("飞机");
}
}
//方案3,没有对原来类对大的修改,只是增加方法
// 虽然没有在类这个级别上遵守单一职责原则,但在方法级别上仍然遵守单一职责原则
class Vehicle2{
public void run(String vehicle){
System.out.println(vehicle+"在公路上行驶");
}
public void runAir(String vehicle){
System.out.println(vehicle+"在天空上行驶");
}
}