怎样搭建个人网站百度推广话术全流程
什么是工厂模式
将对象的创建和实现分离,以实现解耦
工厂模式优缺点
优点
代码结构简单。
获取产品的过程更加简单。
满足了开闭原则,即对拓展开放,对修改关闭。
缺点
拓展较繁琐,要拓展时,需同时改动抽象工厂和工厂实现类。
实现
实现依赖
yml
pom
SpringUtils
PayFactoryContext
@Component
public class PayFactoryContext {@Autowiredprivate SpringUtils springUtils;@Autowiredprivate AliPay aliPay;public static Map<String, PayFactory> map = new ConcurrentHashMap<>();/*** load once when project start*/@PostConstructpublic void init() {map.put("ali_pay", aliPay);}/*** get PayFactory by beanId** @param beandId* @return*/public PayFactory handleByBean(String beandId) {return (PayFactory) springUtils.getBean(beandId);}/*** get PayFactory by Enum** @param code* @return*/public PayFactory handleByEnum(String code) {return map.get(code);}
}
PayFactory
public interface PayFactory {/*** execute pay*/void pay();
}
AliPay
@Component
public class AliPay implements PayFactory {@Overridepublic void pay() {System.out.println("pay by aliPay !");}
}
App
@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}
方式一 beanId获取工厂
@RestController
public class DemoTestController {public static final String SUCCESS = "ok";@Autowiredprivate PayFactoryContext payFactoryContext;@RequestMapping("/demoTest/{beanId}")public String demoTest(@PathVariable String beanId) {payFactoryContext.handleByBean(beanId).pay();return SUCCESS;}
}
测试:http://localhost:8088/demoTest/aliPay
方式二 Enum获取工厂
@RestController
public class DemoTestController {public static final String SUCCESS = "ok";@Autowiredprivate PayFactoryContext payFactoryContext;@RequestMapping("/demoTest/{code}")public String demoTest(@PathVariable String code) {payFactoryContext.handleByEnum(code).pay();return SUCCESS;}
}
测试:http://localhost:8088/demoTest/ali_pay