设计模式——抽象工厂模式
2017-11-01 15:17
183 查看
个人理解:
1. 抽象工厂模式是简单工厂模式的升级版,对多个简单工厂模式的Factory类通过FactoryManager进行管理, 工厂管理类通过传入参数生成相应Factory类,Factory生成相应产品
2. 抽象工厂类包含元素:产品抽象类、产品实现类、工厂抽象类、工厂实现类、工厂管理类
3. 抽象工厂模式可以对两级商品的创建进行管理,商品类A、B、C...等多种商品类,A商品类有Aa、Ab...An等多种产品,B商品类有B1、B2...Bn多种产品;Factory类有A产品的Factory类,B产品的Factory类....等等多种商品类的Factory类
如下示例代码:
1. 产品Color&&产品Shape的工厂类继承于同一工厂抽象类 AbstractFactory
2. FactoryManager为工厂管理类,有静态方法 getFactory ,通过传String 参数返回 AbstractFactory
抽象工厂模式Android源码应用
抽象工厂模式在 Android 源码中的实现相对来说是比较少的,其中一个比较确切的例子是 Android 底层对 MediaPlayer 的创建,具体类图如下所示(在新的标签页中打开该图片即可):
四种 MediaPlayerFactory 分别会生成不同的 MediaPlayer 基类:StagefrightPlayer、NuPlayerDriver、MidFile 和 TestPlayerStub ,四者均继承于MediaPlayerBase 。
抽象工厂的优点有很多,一个显著的优点是分离接口与实现,客户端使用抽象工厂来创建需要的对象,它根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已,使其从具体的产品实现中解耦,同时基于接口与实现的分离,使抽象工厂模式在切换产品类时更加灵活、容易。
当然缺点也是很明显的,第一个也是最明显的就是类文件的大大增多,第二个是如果要扩展新的产品类,就需要去修改抽象工厂类的最下层接口,这就会导致所有的具体工厂类均会被修改。
代码示例:
工厂管理类:
抽象工厂类:
产品Color工厂实现类:
产品Color抽象类:
产品Color实现类:
产品Shape工厂实现类:
产品Shape抽象类:
产品Shape实现类:
3. 工厂管理类通过传入参数生成相应Factory类,Factory生成相应产品
1. 抽象工厂模式是简单工厂模式的升级版,对多个简单工厂模式的Factory类通过FactoryManager进行管理, 工厂管理类通过传入参数生成相应Factory类,Factory生成相应产品
2. 抽象工厂类包含元素:产品抽象类、产品实现类、工厂抽象类、工厂实现类、工厂管理类
3. 抽象工厂模式可以对两级商品的创建进行管理,商品类A、B、C...等多种商品类,A商品类有Aa、Ab...An等多种产品,B商品类有B1、B2...Bn多种产品;Factory类有A产品的Factory类,B产品的Factory类....等等多种商品类的Factory类
如下示例代码:
1. 产品Color&&产品Shape的工厂类继承于同一工厂抽象类 AbstractFactory
2. FactoryManager为工厂管理类,有静态方法 getFactory ,通过传String 参数返回 AbstractFactory
抽象工厂模式Android源码应用
抽象工厂模式在 Android 源码中的实现相对来说是比较少的,其中一个比较确切的例子是 Android 底层对 MediaPlayer 的创建,具体类图如下所示(在新的标签页中打开该图片即可):
四种 MediaPlayerFactory 分别会生成不同的 MediaPlayer 基类:StagefrightPlayer、NuPlayerDriver、MidFile 和 TestPlayerStub ,四者均继承于MediaPlayerBase 。
抽象工厂的优点有很多,一个显著的优点是分离接口与实现,客户端使用抽象工厂来创建需要的对象,它根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已,使其从具体的产品实现中解耦,同时基于接口与实现的分离,使抽象工厂模式在切换产品类时更加灵活、容易。
当然缺点也是很明显的,第一个也是最明显的就是类文件的大大增多,第二个是如果要扩展新的产品类,就需要去修改抽象工厂类的最下层接口,这就会导致所有的具体工厂类均会被修改。
代码示例:
工厂管理类:
public class FactoryManager { public static AbstractFactory getFactory(String factoryType){ if (TextUtils.isEmpty(factoryType)) return null; if (factoryType.equals(Constants.EXTRA_FACTORY_TYPE_COLOR)){ return new ColorFactory(); }else if (factoryType.equals(Constants.EXTRA_FACTORY_TYPE_SHAPE)){ 4000 return new ShapeFactory(); }else { return null; } } }
抽象工厂类:
public abstract class AbstractFactory { public abstract Color getColor(String colorType); public abstract Shape getShape(String shapeType); }
产品Color工厂实现类:
public class ColorFactory extends AbstractFactory { @Override public Color getColor(String colorType) { if (TextUtils.isEmpty(colorType)){ return null; } if (colorType.equals(Constants.EXTRA_COLOR_BLUE)){ return new BlueColor(); } else if (colorType.equals(Constants.EXTRA_COLOR_RED)){ return new RedColor(); }else { return null; } } @Override public Shape getShape(String shapeType) { return null; } }
产品Color抽象类:
public abstract class Color { public abstract void fill(); }
产品Color实现类:
public class BlueColor extends Color { @Override public void fill() { Log.i("factory_mode", "----------draw: BlueColor---------"); } }
public class RedColor extends Color { @Override public void fill() { Log.i("factory_mode", "----------draw: RedColor---------"); } }
产品Shape工厂实现类:
public class ShapeFactory extends AbstractFactory { @Override public Color getColor(String colorType) { return null; } @Override public Shape getShape(String shapeType) { if (TextUtils.isEmpty(shapeType)){ return null; } if (shapeType.equals(Constants.EXTRA_SHAPE_CIRCLE)){ return new ShapeCircle(); } else if (shapeType.equals(Constants.EXTRA_SHAPE_RECTANGLE)){ return new ShapeRectangle(); } else if (shapeType.equals(Constants.EXTRA_SHAPE_SQUARE)){ return new ShapeSquare(); }else { return null; } } }
产品Shape抽象类:
public abstract class Shape { public abstract void draw(); }
产品Shape实现类:
public class ShapeCircle extends Shape { @Override public void draw() { Log.i("factory_mode", "----------draw: ShapeCircle---------"); } }
public class ShapeRectangle extends Shape { @Override public void draw() { Log.i("factory_mode", "----------draw: ShapeRectangle---------"); } }
public class ShapeSquare extends Shape { @Override public void draw() { Log.i("factory_mode", "----------draw: ShapeSquare---------"); } }
3. 工厂管理类通过传入参数生成相应Factory类,Factory生成相应产品
相关文章推荐
- 二十四种设计模式:抽象工厂模式(使用频率5个星,共5星)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式--抽象工厂模式
- 设计模式-抽象工厂模式
- .NET设计模式(3):抽象工厂模式(Abstract Factory)
- 设计模式之抽象工厂模式
- 设计模式笔记-抽象工厂模式
- 设计模式(二)之抽象工厂模式(Abstract Factory) C++实现
- 设计模式-工厂方法模式/抽象工厂模式
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
- Android设计模式之抽象工厂模式(二)
- 设计模式(二)工厂模式:3-抽象工厂模式
- 【设计模式】学习笔记6:抽象工厂模式(Abstract Factory)
- .NET设计模式(3): 抽象工厂模式
- C#设计模式(4)——抽象工厂模式
- java设计模式之抽象工厂模式
- c++设计模式:抽象工厂模式(Abstract Factory Pattern)
- 设计模式--抽象工厂模式(八)
- 设计模式--抽象工厂模式(简要)(九)
- Python设计模式之抽象工厂模式