创建型设计-抽象工厂
Posted 秋天de枫叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建型设计-抽象工厂相关的知识,希望对你有一定的参考价值。
声明一下:本文的文字多数文字都是来自网上,只有例子是自己写的。因为自我感觉还没有能力能够系统的解释一个模式,已经有现成的比较完善的说明,就不重复造轮子哈。
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。
适用场景:
当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。
抽象工厂类图:
demo:
抽象工厂类:
public interface IAutomobileFactory
IAutomobile3_4Liter car3_4parts();
IAutomobile2_4Litre car2_4parts();
具体工厂实现1:
public class BenzFactory implements IAutomobileFactory
@Override
public IAutomobile3_4Liter car3_4parts()
return new Automobile3_4LiterImpl();
@Override
public IAutomobile2_4Litre car2_4parts()
return new Automobile2_4LiterImpl();
实现2:
public class AudiFactory implements IAutomobileFactory
@Override
public IAutomobile3_4Liter car3_4parts()
return new Automobile3_4LiterImpl();
@Override
public IAutomobile2_4Litre car2_4parts()
return new Automobile2_4LiterImpl();
抽象产品类:
public interface IAutomobile2_4Litre
void Create2_4Engine();
void Create2_4Tyre();
public interface IAutomobile3_4Liter
void Create3_4Engine();
void create3_4Tyre();
public class Automobile2_4LiterImpl implements IAutomobile2_4Litre
@Override
public void Create2_4Engine()
System.out.println("制造发动机,奥迪2.4");
@Override
public void Create2_4Tyre()
System.out.println("制造轮胎,奥迪2.4");
实现2:
public class Automobile3_4LiterImpl implements IAutomobile3_4Liter
@Override
public void Create3_4Engine()
System.out.println("制造发动机,奔驰3.4");
@Override
public void create3_4Tyre()
System.out.println("制造轮胎,奔驰3.4");
public class main
public static void main(String[] args)
IAutomobileFactory audiFactory=new AudiFactory(); //实例化奥迪工厂
IAutomobile2_4Litre audi2_4= audiFactory.car2_4parts(); //返回奥迪工厂里创建2.4升汽车的零件对象
audi2_4.Create2_4Engine(); //发动机
audi2_4.Create2_4Tyre(); //轮胎
IAutomobileFactory benzFactory=new BenzFactory();//实例化奔驰工厂
IAutomobile3_4Liter benz=benzFactory.car3_4parts();//返回奔驰工厂里创建3.4升汽车的零件对象
benz.Create3_4Engine();
benz.create3_4Tyre();
输出结果:
制造发动机,奥迪2.4
制造轮胎,奥迪2.4
制造发动机,奔驰3.4
制造轮胎,奔驰3.4
抽象工厂优缺点:
优点:
抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。
缺点:
产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。
以上是关于创建型设计-抽象工厂的主要内容,如果未能解决你的问题,请参考以下文章