abstract class Template{
// 模板方法,定义了算法的骨架
public void templateMethod() {
System.out.println("执行模板方法的前置操作");
Product product = createProduct();
System.out.Printlin(product.toString);
System.out.println("执行模板方法的后置操作");
}
// 工厂方法,由子类实现具体的产品创建
protected abstract Product createProduct();
}
// 具体策略类1/子模板1
class StrategyImpl1 extends Template {
@Override
protected Product createProduct() {
return "产品1";
}
@PostConstruct
public void registryFactory(){
Factory.CHOOSER_MAP.registry("1",this);
}
}
// 具体策略类2/子模板2
class StrategyImpl2 extends Template {
@Override
protected Product createProduct() {
return "产品2";
}
@PostConstruct
public void registryFactory(){
Factory.CHOOSER_MAP.registry("2",this);
}
}
// 工厂接口
public class Factory {
private final static Map<String, Strategy > CHOOSER_MAP = new ConcurrentHashMap<>();
public static void registry(String code, Strategy strategy ) {
CHOOSER_MAP.put(code, strategy );
}
public static Strategy chose(String code) {
CHOOSER_MAP.get(code);
}
}
// 测试类
public class Main {
public static void main(String[] args) {
StrategyImpl1 StrategyImpl1 = PlatformChooserFactory.chose(“1”);
StrategyImpl1.templateMethod();
StrategyImp2 StrategyImpl2 = PlatformChooserFactory.chose(“2”);
StrategyImpl2.templateMethod();
}
}
缺点:
需要根据具体的应用场景和需求来权衡使用策略模式、工厂模式和模板模式的混合。在某些情况下,这种组合可以提供更灵活、可扩展和可维护的设计,但也需要考虑代码复杂性和类的数量增加的影响。