JAVA设计模式之二抽象工厂

     上一篇我们讲到了工厂方法模式,而通过例子以及实践,原有的工厂方法模式有一个问题,那就是如果需要拓展方法就必须对工厂类进行修改,这就违背了闭包原则。因此,对于需求的不断变化,那应生新的方法去解决问题,这就引入了抽象工厂模式。而抽象工厂只是在原有的工厂方法就行了调整,多出了一个接口用于拓展,这样如果出现新的需求就不用去修改原来工厂接口了,具体还是用代码来说明。
     首先还是搭建工厂接口:
public interface FactoryInter {
     public void produce();
}
接着是两个实现:
public class BMWProduce implements FactoryInter{
     @Override
     public void produce() {
          System. out.println("我生产的是宝马车" );
     }
}
public class AudiProduce implements FactoryInter{
     @Override
     public void produce() {
          System. out.println("我生产的是奥迪车" );
     }
}

然后提供一个新的接口,用于满足新的需求,这里就不去修改原有的工厂接口了。
public interface CarFactoryInter {
     public FactoryInter buildCar();
}

接着是两个工厂类:
public class BMWFactory implements CarFactoryInter{
     @Override
     public FactoryInter buildCar() {
           // TODO Auto-generated method stub
           return new BMWProduce();
     }
}

public class AudiFactory implements CarFactoryInter{
     @Override
     public FactoryInter buildCar() {
           // TODO Auto-generated method stub
           return new AudiProduce();
     }
}

最后是测试:
public class testAbstractFactory {
     public static void main(String[] args) {
          CarFactoryInter carFactory=new AudiFactory();
          FactoryInter factory= carFactory.buildCar();
           factory.produce();
     }
}

得到的结果是: 我生产的是奥迪车
总结:这个抽象工厂看起来有点多此一举,为了新的方法而再去创建一个接口来实现。但在实际项目中这样做才符合了闭包原则,最简单的,最简单,两种车都需要上色,但是车型不同上色需要的材料以及方式都不一样,这时候就需要修改一下新的工厂类方法即可,就不用去修改之前的代码结构了。当然总归还是得根据实际项目需求进行吧,但鉴于可拓展性还是建议使用抽象工厂,虽然他看起来不是那么好理解。
发布了66 篇原创文章 · 获赞 5 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/u011622226/article/details/51679958