抽象工厂模式
来源:互联网 发布:窗帘的价格是怎么算法 编辑:程序博客网 时间:2024/05/07 13:42
一句话定义
定义一个 创建 一系列相关或相互依赖对象 的接口,而不指定具体类。
使用场景
具有多个相关的类型,且只会使用其中之一。
实现要点
1. 在一个工厂里面聚合多个同类产品2. 主要解决接口选择问题3. 实际就是工厂模式的工程模式,一个生产工厂的工厂。
情景假设
每一个图形都有 形状 和 颜色 两个属性,通过不同的搭配,生产不同的图形。
实现步骤
1. 创建形状和颜色的接口
/** * 形状接口类 */public interface Shape { void draw();}
/** * 颜色接口 */public interface Color { void paint();}
2. 创建具体形状和颜色
/** * 具体图形类 */public class CircleShape implements Shape { @Override public void draw() { Log.i("info", "draw: ==++ 圆"); }}
/** * 具体图形类 */public class RectangleShape implements Shape { @Override public void draw() { Log.i("info", "draw: ==++ 方"); }}
/** * 具体颜色类 */public class RedColor implements Color{ @Override public void paint() { Log.i("info", "paint: ==++ 红色"); }}
/** * 具体颜色类 */public class GreenColor implements Color { @Override public void paint() { Log.i("info", "paint: ==++ 绿色" ); }}
3. 创建抽象工厂
/** * 工厂抽象类 */public abstract class AbstractFactory { /** * 创建形状 */ public abstract Shape createShape(); /** * 创建颜色 */ public abstract Color createColor();}
4. 创建抽象工厂子类真实工厂
/** * 具体工厂,创建红色的圆 */public class ShapeFactoryA extends AbstractFactory { @Override public Shape createShape() { return new CircleShape(); } @Override public Color createColor() { return new RedColor(); }}
/** * 具体工厂类 创建绿色的方形 */public class ShapeFactoryB extends AbstractFactory{ @Override public Shape createShape() { return new RectangleShape(); } @Override public Color createColor() { return new GreenColor(); }}
5. 使用中创建形状
// 抽象工厂模式创建 ShapeFactoryA shapeFactoryA = new ShapeFactoryA(); Color color = shapeFactoryA.createColor(); Shape shape = shapeFactoryA.createShape(); color.paint(); shape.draw();
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- MySQL 不允许从远程访问的解决方法
- HTML之标签
- javascript(js)正则表达式基本用法
- mfc 修改默认 的图标
- 2016年7款最佳 Java 框架
- 抽象工厂模式
- html之元素与元素的形成
- Linux常用命令大全
- 461. Hamming Distance
- 32
- 使用CKEditor
- 由service层接口有什么用?引申到基于JDK原生和CGLIB动态代理实现spring事务管理的机制的思考
- 晒图谱,涨姿势,得好礼
- 1219堆和栈的区别