抽象工厂模式小试
一、介绍
什么是抽象工厂模式呢?《研磨设计模式》中是这样定义的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
本质是——切换产品簇的实现。
这里的描述挺含糊的,产品簇是什么呢,就是一系列有关联的对象。其实呢,说白了,就是这个工厂接口是用来创建一系列对象的,其实现类保证了其创建的一系列对象直接都是有联系的。
二、我的实现
1、我们假设现在要分配校服给学生,衣服、裤子、鞋子都分别有小、中、大码。代码如下:
package abstractFactory; //衣服接口 public interface Clothes { }
package abstractFactory; //鞋子接口 public interface Shoes { }
package abstractFactory; //裤子接口 public interface Trousers { }
其中,衣服、裤子、鞋子分别有3个实现类,即BigClothes、MiddleClothes、SmallClothes,BigShoes、MiddleShoes、SmallShoes和BigTrousers、MiddleTrousers、SmallTrousers。这里就不用列出了。
2、最初,为了方便分配,我们决定小码配小码、中码配中码、大码配大码。
为此我们先建立一个简单的工厂接口,如下:
package abstractFactory; //抽象工厂方法接口 public interface Factory { //衣服 Clothes getCloth(); //裤子 Trousers getTrouser(); //鞋子 Shoes getShoe(); }
3、于是,我们就可以通过子类来构造产品簇了。为了实现小码配小码、中码配中码、大码配大码,我们初步构建3个工厂,如下BigSizeFactory:
package abstractFactory; public class BigSizeFactory implements Factory { //返回大码衣服 public Clothes getCloth() { // TODO Auto-generated method stub return new BigClothes(); } //返回大码鞋子 public Shoes getShoe() { // TODO Auto-generated method stub return new BigShoes(); } //返回大码裤子 public Trousers getTrouser() { // TODO Auto-generated method stub return new BigTrousers(); } }
SmallSizeFactory、MiddleSizeFactory亦如是,这里不列出。
4、我们分配的过程中,发现有很多孩子都是穿中码衣服、小码裤子和大码鞋子的,为了分配方便,于是我们构建了这样一个工厂,如下:
package abstractFactory; //这里产品MSM代表MiddleSmallBig,为了称呼方便 public class MSBFactory implements Factory{ //返回中码衣服 public Clothes getCloth() { // TODO Auto-generated method stub return new MiddleClothes(); } //返回小码裤子 public Trousers getTrouser() { // TODO Auto-generated method stub return new SmallTrousers(); } //返回大码鞋子 public Shoes getShoe() { // TODO Auto-generated method stub return new BigShoes(); } }
5、可知,只要知道套餐,就无需关心具体的产品细节。当然了,这里,我们的产品工厂构造的产品之间联系并不十分紧密,这里只是为了简单演示。
另外,我们可以发现,使用抽象工厂模式来创建一系列相关联的对象非常有用,而且可以很方便的切换产品簇。
/**
* ————————如果觉得本博文还行,别忘了推荐一下哦,谢谢!
* 作者:钱书康
* 欢迎转载,请保留此段声明。
* 出处:http://www.cnblogs.com/zrtqsk/
*/
* ————————如果觉得本博文还行,别忘了推荐一下哦,谢谢!
* 作者:钱书康
* 欢迎转载,请保留此段声明。
* 出处:http://www.cnblogs.com/zrtqsk/
*/