欢迎来到天天文库
浏览记录
ID:30200831
大小:222.00 KB
页数:13页
时间:2018-12-27
《java抽象工厂模式详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.前两章我们已经讨论了两种有关工厂的模式,今天我们来看最后一种与工厂相关的模式,抽象工厂模式。抽象工厂模式算是工厂相关模式的终极形态,如果各位完全理解了上一章的工厂方法模式,那么抽象工厂模式就很好理解了。它与工厂方法唯一的区别就是工厂的接口里是一系列创造抽象产品的方法,而不再是一个,而相应的,抽象产品也不再是一个了,而是一系列相关的产品。这其实是工厂方法模式的一种扩展不是吗?通常意义来我们谈到扩展,通常有两种方式可以扩展一个接口或者类,就是继承和组合。通常情况下,我们推荐使用组合扩展一个现有的类或接口,但这并非绝对,如果你扩展
2、的子类或子接口与现有的类或接口明显是“是一个(isa)”的关系,也就是继承的关系,那么使用继承可以获得更多的好处。下面我们就首先来看一下抽象工厂模式的定义以及类图,全部引自百度百科。定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。定义中说了,我们是要创建一个接口,而这个接口是干嘛的呢,前面说了,是为了创建一组相关或者相互依赖的对象,而且还有一点就是,我们创建的对象不是具体的类,也就是说我们创建的是一个接口或者一个抽象类。下面我们来看看抽象工厂模式的类图。我们对比下刚才的定义,LZ给各位分析下上面的类
3、图,首先刚才说了,我们要创建一个接口,这个接口就是指的Creator,而一组相关或者相互依赖的对象,就是指的ProductA和ProductB以及它们具体的实现类,而上面又提到说不是返回的具体的类,所以我们返回的应该是接口或者抽象类,那么在上述类图当中,则是指的ProductA和ProductB接口。下面LZ将上述类图诠释成容易理解的JAVA代码,供各位参考。首先给出我们的产品族,也就是类图中右半部分。packagenet;interfaceProductA{voidmethodA();}interfaceProductB{v
4、oidmethodB();页.}classProductA1implementsProductA{publicvoidmethodA(){System.out.println("产品A系列中1型号产品的方法");}}classProductA2implementsProductA{publicvoidmethodA(){System.out.println("产品A系列中2型号产品的方法");}}classProductB1implementsProductB{publicvoidmethodB(){System.out.pr
5、intln("产品B系列中1型号产品的方法");}}classProductB2implementsProductB{publicvoidmethodB(){System.out.println("产品B系列中2型号产品的方法");}}结构比较清晰,下面是类图中左半部分,首先给出工厂接口。packagenet;publicinterfaceCreator{ProductAcreateProductA();ProductBcreateProductB();}下面是两个具体的工厂实现类。packagenet;页.publiccla
6、ssConcreteCreator1implementsCreator{publicProductAcreateProductA(){returnnewProductA1();}publicProductBcreateProductB(){returnnewProductB1();}packagenet;publicclassConcreteCreator2implementsCreator{publicProductAcreateProductA(){returnnewProductA2();}publicProductBc
7、reateProductB(){returnnewProductB2();}}这样我们的类图代码就实现完毕,下面我们写一个测试类,去调用一下,感受一下抽象工厂模式的客户端调用方式。packagenet;publicclassClient{publicstaticvoidmain(String[]args)throwsException{Creatorcreator=newConcreteCreator1();ProductAproductA=creator.createProductA();ProductBproductB=c
8、reator.createProductB();productA.methodA();productB.methodB();creator=newConcreteCreator2();productA=creator.createProductA();productB=cre
此文档下载收益归作者所有