public class SpringAwareFactory, I, O> extends AbstractFactory implements ApplicationListener {
private final List adapterList = new LinkedList();
@Override
public List extends Adapter> availableAdapters() {
return this.adapterList;
}
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
contextRefreshedEvent.getApplicationContext().getBeansOfType(Adapter.class).values().stream().forEach(d -> {
adapterList.add((D) d);
});
System.err.println(adapterList);
}
}
@Component
public class SpringToyFactory extends SpringAwareFactory {
@Override
public List extends Adapter> availableAdapters() {
return super.availableAdapters();
}
}
到此工厂代码堡垒的搭建雏形已经出来了~~~~~~~~~
抽象适配器开发
老道理定义一个万能抽象类,将泛型具象化,实现了 Production 方法,但是具体的生产原料的方法给抽象出去了,具体的实现交给子类了。这样更灵活一点,将代码进行了一个结耦操作。拿个例子举例来说,不论是什么种类的冰棍的生产过程是不是都是一样的,只是说有原料上的不同而已,如果从代码角度上进行优化我们是不是可以将冰棍的生产过程进行一个拆分出来,达到一个解耦的目的。下面的抽象类运用的也是这么一个思想,然后抽象类中的 IsSupport 方法里面利用到了 Types 方法,Types 方法的实现也是交给子类实现的,只是说为其子类封装好了特定的逻辑而已。仔细想想这种思想在生活中是不是也很常见呢?一切本着简化操作的理念,用户只需付出很少的学习成本,就可以实现复杂需求的目标。是不是很人性化化呢哈哈哈
/**
* 具体的生产玩具的逻辑在这,抽象类抽象出去的方法只是一个提供原料的方法
*/
public abstract class AbstractAdapter implements Adapter, StockHandler {
@Override
public Boolean isSupport(InputData input) {
return this.types().contains(input.getType());
}
@Override
public List production(Map map) {
ArrayList toys = new ArrayList();
List
抽象适配器子类
代码逻辑很简单,给自己贴标签,说自己是猫玩具生产部门、只提供生产猫玩具的原料
@Component
public class CatDepartmentAdapter extends AbstractAdapter {
@Override
public List getStocks(Map params) {
ArrayList toys = new ArrayList();
ToyCat catone = new ToyCat("猫一", "黄");
ToyCat cattwo = new ToyCat("猫二", "红");
catone.setId("1");
cattwo.setId("2");
toys.add(catone);
toys.add(cattwo);
ArrayList res = new ArrayList();
toys.stream().forEach(a -> {
res.add(a);
});
return res;
}
@Override
public List types() {
ArrayList res = new ArrayList();
res.add("cat");
return res;
}
}