设计模式常用的七大原则有:
- 单一职责原则
- 接口隔离原则
- 依赖倒转原则
- 里氏替换原则
- 开闭原则 ocp
- 迪米特法则
- 合成复用原则
单一原则
package com.principle.singleresponsibility;
import com.sun.prism.shader.Solid_TextureYV12_AlphaTest_Loader;
/**
* @ClassName:SingleResponsibility1
* @Package:com.principle.singleresponsibility
* @Description:
* @Company: byd </p>
* @Author lFF
* @Creat:2023/6/19--10:33
* @Copyright: Copyright (c) 2023 </p>
* @Version 1.0.0
*/
public class SingleResponsibility1 {
public static void main(String[] args){
Vehicle vehicle = new Vehicle();
vehicle.run("潜艇");
vehicle.run("汽车");
vehicle.run("飞机");
}
}
// 交通工具类
// 方式1
// 1. 在方式1 的run方法中,违反了单一职责原则
// 2. 解决的方案非常的简单,根据交通工具运行方法不同,分解成不同类即可
class Vehicle {
public void run(String vehicle) {
System.out.println(vehicle + " 在公路上运行....");
}
}
package com.principle.singleresponsibility;
/**
* @ClassName:SingleResponsibility2
* @Package:com.principle.singleresponsibility
* @Description:
* @Company: byd </p>
* @Author lFF
* @Creat:2023/6/19--10:46
* @Copyright: Copyright (c) 2023 </p>
* @Version 1.0.0
*/
public class SingleResponsibility2 {
public static void main(String[] args){
// TODO Auto-generated method stub
RoadVehicle roadVehicle = new RoadVehicle();
roadVehicle.run("摩托车");
roadVehicle.run("汽车");
AirVehicle airVehicle = new AirVehicle();
airVehicle.run("飞机");
}
}
//方案2的分析
//1. 遵守单一职责原则
//2. 但是这样做的改动很大,即将类分解,同时修改客户端
//3. 改进:直接修改Vehicle 类,改动的代码会比较少=>方案3
class RoadVehicle{
public void run(String vehicle) {
System.out.println(vehicle + "公路运行");
}
}
class AirVehicle{
public void run(String vehicle){
System.out.println(vehicle+"空中飞翔");
}
}
class WaterVehicle{
public void run(String vehicle){
System.out.println(vehicle + "水中运行");
}
}
package com.principle.singleresponsibility;
/**
* @ClassName:SingleResponsibility3
* @Package:com.principle.singleresponsibility
* @Description:
* @Company: byd </p>
* @Author lFF
* @Creat:2023/6/19--10:50
* @Copyright: Copyright (c) 2023 </p>
* @Version 1.0.0
*/
public class SingleResponsibility3 {
public static void main(String[] args){
Vehicle2 vehicle2 = new Vehicle2();
vehicle2.run("摩托车");
vehicle2.runAir("飞机");
vehicle2.runWater("潜艇");
}
}
//方式3的分析
//1. 这种修改方法没有对原来的类做大的修改,只是增加方法
//2. 这里虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然是遵守单一职责
class Vehicle2 {
public void run(String vehicle) {
//处理
System.out.println(vehicle + " 在公路上运行....");
}
public void runAir(String vechicle){
System.out.println(vechicle + "在空中飞翔");
}
public void runWater(String vehicle){
System.out.println(vehicle + "在水中运行");
}
}