本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(1)

设计模式之单一职责原则

发布于2021-03-10 18:10     阅读(1270)     评论(0)     点赞(5)     收藏(3)


对类来说,即一个类应用只负责一项职责,如类A负责两个不同的职责:职责1,职责2.当职责1需求变更时,可造成职责2执行错误,所以需要将类A的粒度分解为A1,A2.

  • 降低类的复杂度,一个类只负责一项职责
  • 提高类的可读性,可维护性
  • 降低变更引起的风险
  • 通常情况下,我们应该遵守单一职责原则,只在逻辑足够简单,才可以在代码级别违反单一职责原则;只有类中方法数量足够少时,可以在方法级别保持单一职责原则即可
package www.perwrj.principle.SRP;
/**
 * 方案一:不遵守单一职责原则
 * @author wangruijie
 *
 */
public class SingleResponsibilityDemo1 {
	public static void main(String[] args) {
		Vehicle vehicle = new Vehicle();
		vehicle.run("汽车");
		vehicle.run("飞机");
		vehicle.run("潜艇");
		/*
		 * 汽车在跑
		   飞机在跑
		   潜艇在跑
		 */
	}
}
/**
 * 交通工具类
 * @author wangruijie
 *
 */
class Vehicle{
	/**
	 * run方法中,违反单一职责原则
	 * 解决方案很简单,根据交通工具运行的方式不同,分解成不同的类即可
	 * @param vegicle
	 */
	public void run(String vegicle) {
		System.out.println(vegicle + "在跑");
	}
}
package www.perwrj.principle.SRP;
/**
 * 方案二:遵守了单一职责原则
 * 但这样花销很大,要将类分解,同时修改客户端
 * 改进:直接修改Vehicle类
 * @author wangruijie
 *
 */
public class SingleResponsibilityDemo2 {
	public static void main(String[] args) {
		RoadVehicle roadVehicle = new RoadVehicle();
		roadVehicle.run("汽车");
		AirVehicle airVehicle = new AirVehicle();
		airVehicle.run("飞机");
		WaterVehicle waterVehicle = new WaterVehicle();
		waterVehicle.run("潜艇");
	}
}
/**
 * 地上跑的
 * @author wangruijie
 *
 */
class RoadVehicle{
	public void run(String vehicle) {
		// TODO Auto-generated method stub
		System.out.println(vehicle + "地上跑的");
	}
}
/**
 * 天上飞的
 * @author wangruijie
 *
 */
class AirVehicle{
	public void run(String vehicle) {
		// TODO Auto-generated method stub
		System.out.println(vehicle + "天上飞的");
	}
}
/**
 * 在水中跑
 * @author wangruijie
 *
 */
class WaterVehicle{
	public void run(String vehicle) {
		// TODO Auto-generated method stub
		System.out.println(vehicle + "在水中跑");
	}
}
package www.perwrj.principle.SRP;
/**
 * 方案三
 * 这种修改方法没有对原来类做大的修改,只是增加了方法。
 * 没有在类级别上遵守单一职责原则
 * 在方法级别上遵守单一职责原则
 * @author wangruijie
 *
 */
public class SingleResponsibilityDemo3 {
	public static void main(String[] args) {
		Vehicle2 vehicle2 = new Vehicle2();
		vehicle2.run("汽车");
		vehicle2.runAir("飞机");
		vehicle2.runWater("潜艇");
		
	}
}
/**
 * 交通工具类
 * @author wangruijie
 *
 */
class Vehicle2{
	/**
	 * 
	 * @param vegicle
	 */
	public void run(String vegicle) {
		System.out.println(vegicle + "在地上跑");
	}
	
	public void runAir(String vegicle) {
		System.out.println(vegicle + "在天上跑");
	}
	
	public void runWater(String vegicle) {
		System.out.println(vegicle + "在水里跑");
	}
}

原文链接:https://www.cnblogs.com/wangruijie/p/14454527.html



所属网站分类: 技术文章 > 博客

作者:Djfj

链接:http://www.javaheidong.com/blog/article/112323/eaab86dd0b0ddffd1208/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

5 0
收藏该文
已收藏

评论内容:(最多支持255个字符)