Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

设计模式 策略模式使用demo

NotificationsYou must be signed in to change notification settings

MellowCo/design-mode-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

通过设计模式,删除 if else 语句,提高代码的可读性和可维护性

github 地址

无设计模式

publicclassOrderHandle {/**   * 无设计模式   */publicvoidgenerateOrder(StringorderType) {if ("ordinary".equals(orderType)) {System.out.println("生成普通订单");    }elseif ("group".equals(orderType)) {System.out.println("生成团购订单");    }elseif ("promotion".equals(orderType)) {System.out.println("暂不支持促销订单");    }  }}// 使用StringorderType ="group";OrderHandleorderHandle =newOrderHandle();orderHandle.generateOrder(orderType);

静态工厂策略模式

github

  • factory
publicclassStaticStrategyFactory {staticMap<String,AbstractOrderHandle>strategyMap =newHashMap<>();publicstaticAbstractOrderHandlegetStrategy(Stringtype) {returnstrategyMap.get(type);  }publicstaticvoidregister(Stringtype,AbstractOrderHandlehandle) {strategyMap.put(type,handle);  }}
  • 策略抽象类
publicabstractclassAbstractOrderHandleimplementsInitializingBean {publicvoidgenerateOrder() {thrownewUnsupportedOperationException("暂不支持生成该类型订单");  }}
  • 订单策略
@ComponentpublicclassGroupOrderHandleextendsAbstractOrderHandle {publicvoidgenerateOrder() {System.out.println("生成团购订单");  }@OverridepublicvoidafterPropertiesSet()throwsException {StaticStrategyFactory.register(OrderEnum.GROUP.getCode(),this);  }}
  • test
@TestvoidtestOrdinaryOrder() {StaticStrategyFactory.getStrategy(OrderEnum.ORDINARY.getCode()).generateOrder();}

自动装配工厂策略模式

github

  • factory
@ComponentpublicclassAutoInjectStrategyFactory {@ResourcepublicList<AbstractPlatformStrategy>platformStrategyList;privatefinalMap<String,AbstractPlatformStrategy>strategyMap =newHashMap<>();@PostConstructpublicvoidregistered() {platformStrategyList.forEach(strategy ->strategyMap.put(strategy.getPlatform(),strategy));  }publicAbstractPlatformStrategygetStrategy(Stringplatform) {returnstrategyMap.get(platform);  }}
  • 策略抽象类
publicabstractclassAbstractPlatformStrategyimplementsIPlatform {publicvoidhandlePlatform() {thrownewUnsupportedOperationException("暂不支持处理该平台");  }}publicinterfaceIPlatform {StringgetPlatform();}
  • 策略
@ServicepublicclassJDPlatformStrategyextendsAbstractPlatformStrategy {@OverridepublicvoidhandlePlatform() {System.out.println("处理京东平台");  }@OverridepublicStringgetPlatform() {returnPlatformEnum.JD.getPlatform();  }}
  • test
@TestvoidtestJDPlatform() {autoInjectStrategyFactory.getStrategy(PlatformEnum.JD.getPlatform()).handlePlatform();}

枚举工厂策略模式

github

  • factory
publicenumWorkOrderEnumFactory {CONSTRUCTION("construction","施工工单",ConstructionStrategy.class),MAINTENANCE("maintenance","维修工单",MaintenanceStrategy.class);privateStringcode;privateStringdesc;privateClass<?>strategyClass;WorkOrderEnumFactory(Stringcode,Stringdesc,Class<?>strategyClass) {this.code =code;this.desc =desc;this.strategyClass =strategyClass;  }publicStringgetCode() {returncode;  }publicStringgetDesc() {returndesc;  }publicClass<?>getStrategyClass() {returnstrategyClass;  }publicstaticIWorkOrderStrategygetStrategy(Stringcode) {for (WorkOrderEnumFactoryworkOrderEnumFactory :WorkOrderEnumFactory.values()) {if (Objects.equals(workOrderEnumFactory.getCode(),code)) {return (IWorkOrderStrategy)SpringContextUtils.getBean(workOrderEnumFactory.getStrategyClass());      }    }thrownewRuntimeException();  }}
  • 策略
@ServicepublicclassConstructionStrategyimplementsIWorkOrderStrategy {publicvoidgenerateWorkOrder() {System.out.println("生成施工工单");  }}
  • test
@TestvoidtestConstructionWorkOrder() {WorkOrderEnumFactory.getStrategy(WorkOrderEnumFactory.CONSTRUCTION.getCode()).generateWorkOrder();}

About

设计模式 策略模式使用demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp