VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • 设计模式之单一职责原则

对类来说,即一个类应用只负责一项职责,如类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

相关教程