围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显示指定它们的类。

每个生成的工厂都能按照工厂模式提供对象。

意图:提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类

解决问题:主要解决接口选择的问题

关键代码:在一个工厂里聚合多个同类产品


AbstractFactory {getA;getB;}AFactory extends AbsFactory{getA,getB};
BFactory extends AbsFactory{getA,getB};AbstractFactory Afactory=FactoryProducer.getFactory("A");
A a=Afactory.getA;AbstractFactory Bfactory=FactoryProducer.getFactory("B");
B b=Bfactory.getB;

优点:当一个产品族的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象

缺点:产品族拓展非常困难,要增加一个系列的某一产品,既要在抽象的Creator里加代码,又要在具体的里面加代码

使用场景:QQ换皮肤,一整套一起换

案例代码:

创建形状接口:

public interface Shape {void draw();
}

形状实现类:

public class Circle implements Shape{@Overridepublic void draw() {System.out.println("circle draw");}
}
public class Rectangle implements Shape{@Overridepublic void draw() {System.out.println("rectangle draw");}
}
public class Square implements Shape{@Overridepublic void draw() {System.out.println("Square draw");}
}

为颜色创建一个接口:

public interface Color {void fill();
}
public class Red implements Color{@Overridepublic void fill() {System.out.println("red fill");}
}
public class Blue implements Color{@Overridepublic void fill() {System.out.println("Blue fill");}
}
public class Green implements Color{@Overridepublic void fill() {System.out.println("Green fill");}
}

为color和shape对象创建抽象类来获取工厂:

public abstract class AbstractFactory {public abstract Color getColor(String color);public abstract Shape getShape(String shape);
}

继承抽象工厂类,基于给定的信息生成实体类对象

public class ShapeFactory extends AbstractFactory{@Overridepublic Color getColor(String color) {return null;}@Overridepublic Shape getShape(String shape) {if(shape==null)return null;if(shape.equalsIgnoreCase("circle")){return new Circle();}else if(shape.equalsIgnoreCase("rectangle")){return new Rectangle();}else if(shape.equalsIgnoreCase("square")){return new Square();}return null;}
}
public class ColorFactory extends AbstractFactory{@Overridepublic Color getColor(String color) {if(color==null)return null;else if(color.equalsIgnoreCase("red")){return new Red();}else if(color.equalsIgnoreCase("green")){return new Green();}else if(color.equalsIgnoreCase("blue")){return new Blue();}return null;}@Overridepublic Shape getShape(String shape) {return null;}
}

创建一个工厂创造器/生成器类,通过传递形状或者颜色信息来获取工厂

public class FactoryProducer {public static AbstractFactory getFactory(String choice){if(choice.equalsIgnoreCase("shape")){return new ShapeFactory();}else if(choice.equalsIgnoreCase("color")){return new ColorFactory();}return null;}
}

测试:

public class AbstractFactoryPattrnDemo {public static void main(String[] args) {AbstractFactory shape = FactoryProducer.getFactory("shape");shape.getShape("circle").draw();shape.getShape("rectangle").draw();shape.getShape("square").draw();AbstractFactory color = FactoryProducer.getFactory("color");color.getColor("red").fill();color.getColor("green").fill();color.getColor("blue").fill();}
}

【设计模式笔记】抽象工厂模式相关推荐

  1. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  2. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  4. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  5. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  6. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  7. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  8. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

  9. 设计模式之笔记--抽象工厂模式(Abstract Factory)

    抽象工厂模式(Abstract Factory) 定义 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 类图 描述 多个抽象产品 ...

  10. 设计模式之抽象工厂模式学习笔记

    前言 在学习抽象工厂模式之前,最好先学习了解简单工厂模式和工厂方法模式.这样会对学习抽象工厂模式有帮助,因为抽象工厂模式也是基于工厂方法模式的. 解释 说白了就是工厂的工厂,以一个超级工厂为核心,围绕 ...

最新文章

  1. java时间格式转换_Java中System.currentTimeMillis()计算方式与时间的单位转换
  2. 数据库数据满足树结构时,求一个结点的子结点有哪些
  3. Centos 安装 MySql
  4. 微众WeCross 跨链平台(8)TTM可信事务机制
  5. 移动端html游戏开发,GitHub - PromeYang/GameBuilder: GameBuilder 是移动端轻量HTML5游戏快速开发框架,主要应用于活动推广。...
  6. @RequestParam和@RequestBody区别
  7. shiro 实现自己定义权限规则校验
  8. 18 个惊人的 GitHub 仓库
  9. Java网络编程之UDP
  10. Ambari技术介绍-尚硅谷大数据培训
  11. 算法导论第三版 第5章习题答案
  12. 如何巧用Microsoft edge浏览器合并pdf文件
  13. Cisco 路由器破解密码
  14. 用html制作的蚂蜂窝旅游网页设计,蚂蜂窝扩大移动布局 旅游攻略全面HTML5
  15. 一群人在网上直播自己怎么写代码,而且还有人爱看
  16. 联想微型计算机怎么拆开图解,Lenovo(Ideapad)笔记本如何拆卸及安装电池
  17. 为 Drupal 7 构建一个新主题
  18. 考研英语 词根词缀单词71-80
  19. 接口和继承知识点总结
  20. 灵动微 MM32 多路ADC-DMA配置

热门文章

  1. 采用Reflector的VS.net插件断点调试无源码DLL 分类:
  2. 元素exist/present/visible(vanish)/enable的区别
  3. EasyUI中Datagrid列定位方法
  4. 历往游戏代码与当前DEADXSPACE项目最新进度。
  5. Web开发实用网站资源
  6. UVA455 Periodic Strings【水题】
  7. 奇妙的证明 —— 0! = 1(a^0=1)
  8. 卷积神经网络(CNN)的细节问题(滤波器的大小选择)
  9. (单层)感知机学习规则
  10. 辨异 —— 逻辑之辨、人文社科观念