您的位置:首页 > 编程语言 > Java开发

JAVA设计模式之二抽象工厂

2016-06-15 11:30 211 查看
     上一篇我们讲到了工厂方法模式,而通过例子以及实践,原有的工厂方法模式有一个问题,那就是如果需要拓展方法就必须对工厂类进行修改,这就违背了闭包原则。因此,对于需求的不断变化,那应生新的方法去解决问题,这就引入了抽象工厂模式。而抽象工厂只是在原有的工厂方法就行了调整,多出了一个接口用于拓展,这样如果出现新的需求就不用去修改原来工厂接口了,具体还是用代码来说明。
     首先还是搭建工厂接口:
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("我生产的是奥迪车" );
}
}

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

[align=left]接着是两个工厂类:[/align]
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();
}
}

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

[align=left]得到的结果是:我生产的是奥迪车[/align]
[align=left]总结:这个抽象工厂看起来有点多此一举,为了新的方法而再去创建一个接口来实现。但在实际项目中这样做才符合了闭包原则,最简单的,最简单,两种车都需要上色,但是车型不同上色需要的材料以及方式都不一样,这时候就需要修改一下新的工厂类方法即可,就不用去修改之前的代码结构了。当然总归还是得根据实际项目需求进行吧,但鉴于可拓展性还是建议使用抽象工厂,虽然他看起来不是那么好理解。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java java设计模式