应用场景:既然时策略,那就是当...情况下,就要...做。代码里最常见就是if....else if...,这种情况,就可以使用策略模式
先来看最原始代码。如下面代码所示,大部分人的优化策略,就是把每个if里面的逻辑抽取出来。
public class StrategyDemo { public void deal(int type){ if(type == 1 ){ //此处大概100多行代码 System.out.println("处理类型为1...业务逻辑"); }else if(type == 2 ){ //此处大概100多行代码 System.out.println("处理类型为2...业务逻辑"); }else if(type == 3 ){ //此处大概100多行代码 System.out.println("处理类型为3...业务逻辑"); } } }
那今天就通过设计模式进行优化。
public class StrategyDemo { public void deal(int type){ if(type == 1 ){ //此处大概100多行代码 System.out.println("处理类型为1...业务逻辑"); }else if(type == 2 ){ //此处大概100多行代码 System.out.println("处理类型为2...业务逻辑"); }else { //此处大概100多行代码 System.out.println("处理类型为3...业务逻辑"); } } public interface IScreen{ public void deal() ; } static class ScreenModelA implements IScreen{ @Override public void deal() { //此处大概100多行代码 System.out.println("处理类型为1...业务逻辑"); } } static class ScreenModelB implements IScreen{ @Override public void deal() { //此处大概100多行代码 System.out.println("处理类型为2...业务逻辑"); } } static class ScreenModelC implements IScreen{ @Override public void deal() { //此处大概100多行代码 System.out.println("处理类型为3...业务逻辑"); } } }
我们发现,通过3个接口实现类去完成之前的3段逻辑,现在还需要做一件事情,那就是根据不同类型创建对象。代码如下
static class ScreenFactory{ public static IScreen getInstance(int type){ if(type == 1 ){ return new ScreenModelA(); }else if(type == 2 ){ return new ScreenModelB(); }else { return new ScreenModelC(); } } } static class ScreenCommon{ private IScreen screen ; public IScreen getScreen() { return screen; } public void setScreen(IScreen screen) { this.screen = screen; } public void doSomeThing(){ screen.deal(); } }
测试
public static void main(String[] args) { int type = 1 ; IScreen screen = ScreenFactory.getInstance(type) ; ScreenCommon common = new ScreenCommon() ; common.setScreen(screen); common.doSomeThing(); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)