一:设计模式的重要性或者目的
写代码就好比盖楼,要想盖的高,.基础设计必须要优秀,就像是摩天大楼与茅草屋的区别;
那么代码为什么需要设计模式呢,因为代码并不是一次性的产物,一套代码写出来,可能会面临后期功能的扩展,代码性能的臃肿,所以,为了代码具有:
- 良好的扩展性,
- 以及复用性,(相同功能的代码,不用多次编写)
- 可读性(编程的规范性)
- 灵活性,
- 可靠性(当我们增加新的功能后,对原有的功能没有影响)
- 使代码呈现高内聚,低耦合的特性
就要用到设计模式.
二:设计模式设计的七大原则:
- 单一职责原则
- 接口隔离原则
- 依赖倒转原则
- 里 氏替换原则
- 开闭原则
- 迪米特法则
- 合成复用原则
**
懂得了设计模式就懂得了面向对象分析和设计(OOA/D)的精要.
**
三,解析:
- 单一职责原则: 各行其职
基本介绍:
对类来说,即一个类只能负责一项职责,如果类A负责两个不同的职责,职责1,职责2,当职责1需求变更而改变A的时候,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2.
比如:一个Dao只能负责一个表的增删改查,如果负责两个表的增删改差就会违反单一职责原则.
案例解析:
交通工具:
方案一
public class designMode1 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("c900摩托车");
vehicle.run("喷气私人飞机");
vehicle.run("喷气私人飞机");
}
}
/**
*交通工具类
* 方式一:在方式一的run方法中,违反了单一职责原则,一个类被多次复用,改一个类就会影响多处代码
* 修改方案1:根据交通工具的运行方式不同,拆分为不同的类,
*/
class Vehicle {
public void run(String vehicle){
System.out.println(vehicle+"在公路上跑...");
}
}
方案二:
/*方拾二*/
public class designMode2 {
//客户端
public static void main(String[] args) {
Vehicle1 vehicle1 = new Vehicle1();
Vehicle2 vehicle2 = new Vehicle2();
Vehicle3 vehicle3 = new Vehicle3();
vehicle1.run("c900摩托车");
vehicle2.run("喷气私人飞机");
vehicle3.run("喷气私人飞机");
}
}
/**
* 交通工具类
* 方式二:在方式二中遵守了单一职责原则,但是这样代码会臃肿,改变了类,又要改变客户端
* 修改方案3:直接修改原先的类,这样修改的代码比较少,
*/
class Vehicle1 {
public void run(String vehicle) {
System.out.println(vehicle + "在公路上跑...");
}
}
class Vehicle2 {
public void run(String vehicle) {
System.out.println(vehicle + "在天上飞..");
}
}
class Vehicle3 {
public void run(String vehicle) {
System.out.println(vehicle + "在海里游...");
}
}
方案三:
public class designMode3 {
public static void main(String[] args) {
Vehicle4 vehicle = new Vehicle4();
vehicle.run("c900摩托车");
vehicle.runAir("喷气私人飞机");
vehicle.runWater("喷气私人飞机");
}
}
***最优方式:***
/**
* 交通工具类
* 方式三:这种修改方式没有对原来的类做大的修改,只是增加方法
* 这种方式虽然没有在类这个级别上遵守,单一职责原则,但是在方法级别遵守了这个原则
*/
class Vehicle4 {
public void run(String vehicle) {
System.out.println(vehicle + "在公路上跑...");
}
public void runAir(String vehicle) {
System.out.println(vehicle + "在天上飞...");
}
public void runWater(String vehicle) {
System.out.println(vehicle + "在海里游...");
}
}
单一职责原则注意事项和细节:
- 降低类的复杂度,一个类只负责一项职责
- 提高代码的可读性,可维护性
- 降低变更引起的风险
- 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级别违反单一职责原则;只有类中方法数量足够少,才可以在方法级别保持单一职责原则.