设计模式-单一职责原则

单一职责原则

对于类来说,一个类应该只负责一项职责。如果A负责两个不同的职责,职责1,职责2,当职责1需求更改而更改A时,可能造成职责2执行错误,所以要将A的粒度分解为A1,A2
	1.降低类的复杂度,一个类只负责一项事情
	2.提高可读性,可维护性
	3.降低变更带来的风险
	4.通常情况下,我们应当遵守单一原则,只有逻辑足够简单,才可以在代码级违反单一原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则(方案三)

方案一

public class SingleResonsibility1 {
    public static void main(String[] args) {
        Vehicle vehicle = new Vehicle();
        vehicle.run("摩托车");
        vehicle.run("汽车");
        vehicle.run("飞机");

    }
}
/**
 * 方案1
 * 1. 违反了单一原则问题 : 飞机应在天上飞,如改为在天上飞,则导则汽车错误
 * 2.解决:
 *    根据交通工具不同,分解成不同的类 		=>  		方案二
 */
class Vehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "在公路上跑*******");
    }
}

在这里插入图片描述

方案二

public class SingleResonsibility2 {
		public static void main(String[] args) {
			RoadVehicle roadVehicle = new RoadVehicle();
			roadVehicle.run("摩托车");
			roadVehicle.run("汽车");
			AirVehicle airVehicle = new AirVehicle();
			airVehicle.run("飞机");
			WaterVehicle waterVehicle = new WaterVehicle();
			waterVehicle.run("游艇");
		}
	}


	/**
	 * 方案2
	 * 1.遵守单一职责原则
	 * 2.但这样做改动大,同时修改客户端
	 * 3.改进:直接修改Vehicle类,改动少 		 => 		 方案三
	 */

	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 + "在水上跑*******");
		}
	}

在这里插入图片描述

方案三

public class SingleResonsibility3 {
    public static void main(String[] args) {
        Vehicle2 vehicle = new Vehicle2();
        vehicle.runRoad("摩托车");
        vehicle.runRoad("汽车");
        vehicle.runAir("飞机");
        vehicle.runWater("游艇");
    }
}

/**
 * 方案3
 * 1.只新增了方法
 * 2.在类级别上没有遵顼单一原则,但是在方法级别上,仍然遵守单一原则
 */
class Vehicle2 {
    public void runRoad(String vehicle) {
        System.out.println(vehicle + "在公路上跑*******");
    }

    public void runAir(String vehicle) {
        System.out.println(vehicle + "在天空飞*******");
    }

    public void runWater(String vehicle) {
        System.out.println(vehicle + "在水上跑*******");
    }

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值