应用场景:既然时策略,那就是当...情况下,就要...做。代码里最常见就是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();
}