抽象工厂模式
来源:互联网 发布:西马智能马桶好吗 知乎 编辑:程序博客网 时间:2024/06/11 14:45
抽象工厂模式(创建型模式)
抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
主要解决:主要解决接口选择的问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
如何解决:在一个产品族里面,定义多个产品。
关键代码:在一个工厂里聚合多个同类产品。
应用实例:服装方面。比如说商务装(成套、一系列具体产品)、时尚装(成套、一系列具体产品)、运动装(成套、一系列具体产品)等。在您的家中,某个衣柜(具体工厂)只能存放某一种这样的衣服(成套、一系列具体产品),每次拿这种成套的衣服也自然要从这个衣柜中取出。用面向对象的思想去理解,所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服有包括具体的上衣(某一具体产品),裤子(某一具体产品)。
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终使用同一产品组中的对象。
缺点:产品组扩展非常困难,要增加一个系列的某一产品,既要在抽象的Creator里加代码,又要在具体的里面加代码
**使用场景:**1、QQ换肤,一整套一起换。2、生成不同操作系统的程序。
注意事项:产品族难扩展,产品等级易扩展。
实现
步骤1
为形状创建一个接口,Shape.java
public interface Shape { void draw();}
步骤2
实现shape接口
Circle.java
public class Circle implements Shape { @Override public void draw() { System.out.println("画圆"); }}
Rectangle.java
public class Rectangle implements Shape { @Override public void draw() { System.out.println("画矩形"); }}
步骤3
创建Color接口
Color.java
public interface Color { void fill();}
步骤4
实现Color接口
Green.java
public class Green implements Color { @Override public void fill() { System.out.println("填充绿色"); }}
Red.java
public class Red implements Color { @Override public void fill() { System.out.println("填充红色"); }}
步骤5
创建工厂抽象类
AbstractFactory.java
public abstract class AbstractFactory { public abstract Shape getShape(String shape); public abstract Color getColor(String color);}
步骤6
创建扩展了抽象类的工厂类、
ShapeFactory.java
public class ShapeFactory extends AbstractFactory {
@Overridepublic Shape getShape(String shape) { if ("rectangle".equals(shape)) { return new Rectangle(); } if ("circle".equals(shape)) { return new Circle(); } return null;}@Overridepublic Color getColor(String color) { return null;}
}
ColorFactory.java
public class ColorFactory extends AbstractFactory { @Override public Shape getShape(String shape) { // TODO Auto-generated method stub return null; } @Override public Color getColor(String color) { if ("green".equals(color)) return new Green(); if ("red".equals(color)) return new Red(); return null; }}
步骤7
创建工厂生成类,来生成ColorFactory和ShapeFactory工厂
public class FactoryProducer { public static AbstractFactory getFactory(String choice) { if ("shape".equals(choice)) { return new ShapeFactory(); } if ("color".equals(choice)) { return new ColorFactory(); } return null; }}
测试
public class Test { public static void main(String[] args) { AbstractFactory shapeFactory = FactoryProducer.getFactory("shape"); Shape circle = shapeFactory.getShape("circle"); circle.draw(); AbstractFactory colorFactory = FactoryProducer.getFactory("color"); Color green = colorFactory.getColor("green"); green.fill(); }}
测试结果
画圆填充绿色
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 棋盘覆盖问题
- win10系统出现“服务主机:本地服务(无网络)(6)”占用大量内存和CPU情况的解决方案
- 第4章 Python笔记 字典
- ionic项目 js查找文件并且转换成base64
- 学习jquery源代码---$.extend
- 抽象工厂模式
- Java 集合类详情
- AtCoder Grand Contest 017-A
- 空结构体与空指针的大小
- Python爬虫实践笔记(一)
- DevExPress控件 客户端常用方法
- Linux下的帧缓冲lcd应用编程及Framebuffer驱动程序模型
- servlet过滤器—filter
- swift3.0 协议