以班级管理为例
方法一:使用策略模式消除过长的if else 或 switch case语句
当你需要创建不同种类的班级时,例如行政班、教学班、走读班时伪代码如下:
public boolean createClass(){
checkValue();//数据校验
if(行政班){
//TODO coding ...
} else if(教学班){
//TODO coding ...
}else if(走读班){
//TODO coding ...
}
return true;
}
这样如果行政班或者其他类型的班级代码逻辑很复杂时,就容易出现过长的方法。利用策略模式抽离if else 语句
1)创建班级抽象策略接口
public interface ClassStrategy{
public void createClass();
}
2)创建实现抽象类ContextStrategy角色
public class ContextStrategy{
private ClassStrategy strategy;
public ContextStrategy(){
}
public void createClass(){
strategy.createClass();
}
public void setStrategy(ClassStrategy context){
this.strategy = strategy ;
}
}
3)实现具体策略
public class AdminClassStrategy implement ClassStrategy{
@override
public void createClass(){
//TODO coding ...
}
}
public class walkingClassStrategy implement ClassStrategy{
@override
public void createClass(){
//TODO coding ...
}
}
public void TeachingClassStrategy implement ClassStrategy{
@override
public void createClass(){
//TODO coding ...
}
}
4) 策略调用
public class strategyClient{
public static void main(String [] args){
ContextStrategy strategy = new ContextStrategy ();
strategy.setStrategy (new AdminStrategy());
strategy.createClass();
strategy.setStrategy (new WalkingStrategy());
strategy.createClass();
}
}
方法二:利用多态抽象工厂抽离相同业务代码
1、创建抽象班级接口
public interface SchoolClass {
void createClass();
}
public class AdminClass implements SchoolClass{
public void createClass(){
// TODO Coding ...
System.out.println("create AdminClass ...");
}
}
public class TeachingClass implements SchoolClass{
public void createClass(){
// TODO Coding ...
System.out.println("create TeachingClass ...");
}
}
public class WalkingClass implements SchoolClass{
public void createClass(){
// TODO Coding ...
System.out.println("create WalkingClass ...");
}
}
public class SchoolClassFactory{
public static SchoolClass getSchoolClass(String schoolClassType){
if(schoolClassType.endsWith("TEACHERCLASS")){
return new TeachingClass();
}else if(schoolClassType.endsWith("ADMINCLASS")){
return new AdminClass();
}else if(schoolClassType.endsWith("WALKINGCLASS")){
return new WalkingClass();
}
return null;
}
}
/**
* Title:测试类
*/
public class TestClass {
public static void main(String[] args) {
SchoolClass teachingClass = SchoolClassFactory.getSchoolClass("TEACHERCLASS");
teachingClass.createClass();
SchoolClass adminClass = SchoolClassFactory.getSchoolClass("ADMINCLASS");
adminClass.createClass();
SchoolClass walkingClass = SchoolClassFactory.getSchoolClass("WALKINGCLASS");
walkingClass.createClass();
}
}
方法三:extract class 提取类 extract method 提取方法
方法四:使用工具类