工厂引入
首先我们有一个food类,要生产不同的产品
public abstract class Food {
public void eat();
}
然后加两个子类
public class Bread extends Food{
@Override
public void eat() {
System.out.println("mianbao");
}
}
public class MushRoom extends Food{
@Override
public void eat() {
System.out.println("蘑菇");
}
}
然后测试代码
public static void main(String[] args) {
Food food=new Bread();
food.eat();
}
这里如果我要生产面别就new 面包 生产别的就new 别的
但是有一个问题,如果我想要在生产的过程中自定义一些配置,那么就麻烦了, 没错new 都要写一遍配置,不然放进工厂里面,配置好后直接拿出来。
简单工厂
public class SimpleFactory {
public Bread createBread(){
//自定义配置
return new Bread();
}
public MushRoom createMushRoom(){
//自定义配置
return new MushRoom();
}
}
这样就方便了不少,但是也有问题,就是每次都要到这个类里面去写,要扩展他的属性和方法挺麻烦的,容易乱。你可以想一想如果一个类有10个方法 ,然后里面有1000类要生产 那是不是直接爆炸。
工厂方法
就是每一个类一个工厂 你想这么扩展都随便
抽象工厂
因为工厂方法有缺学 当有多个产品在一个工厂里生产时,就会很不方便,那我们就需要,写一个大的抽象工厂,里面写好要生产的抽象产品,如果用工厂方法去继承实现他,最后直接调用工厂就可以了。