Java设计模式 - 抽象工厂模式

抽象工厂模式是另一个创建模式。

抽象工厂模式,也称为工厂的工厂,有一个工厂创建其他工厂。

当使用抽象工厂模式时,我们首先使用超级工厂创建工厂,然后使用创建的工厂创建对象。

例子

下面的代码展示了如何使用抽象工厂模式。

我们将要创建形状和打印机。对于形状,我们会有圆形,矩形和正方形。对于打印机,我们将有纸张打印机,网络打印机和屏幕打印机。

对于shape,我们将创建Shape界面,如下所示:

interface Shape {void draw();
}

然后我们创建实现Shape接口的具体类。

class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Inside Rectangle::draw() method.");}
}
class Square implements Shape {@Overridepublic void draw() {System.out.println("Inside Square::draw() method.");}
}
class Circle implements Shape {@Overridepublic void draw() {System.out.println("Inside Circle::draw() method.");}
}

我们为打印机创建一个界面。

interface Printer{void print();
}

然后我们创建实现Printer接口的具体类。

class PaperPrinter implements Printer{@Overridepublic void print() {System.out.println("paper");}
}
class WebPrinter implements Printer{@Overridepublic void print() {System.out.println("web");}
}
class ScreenPrinter implements Printer{@Overridepublic void print() {System.out.println("screen");}
}

最后,我们创建一个抽象类来获取打印机和形状对象的工厂。

abstract class AbstractFactory {abstract Printer getPrinter(String type);abstract Shape getShape(String shape) ;
}

最后,我们创建Factory类,根据给定的信息扩展AbstractFactory以生成具体类的对象。对于新手小白想更轻松的学好Java提升,Java架构,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,扩列下我尉(同英):CGMX9880 【教程/工具/方法/解疑】

class ShapeFactory extends AbstractFactory {@Overridepublic Shape getShape(String shapeType){if(shapeType == null){return null;}    if(shapeType.equalsIgnoreCase("CIRCLE")){return new Circle();} else if(shapeType.equalsIgnoreCase("RECTANGLE")){return new Rectangle();} else if(shapeType.equalsIgnoreCase("SQUARE")){return new Square();}return null;}@OverridePrinter getPrinter(String type) {return null;}
}
class PrinterFactory extends AbstractFactory {@Overridepublic Shape getShape(String shapeType){return null;}@OverridePrinter getPrinter(String type) {if(type == null){return null;}    if(type.equalsIgnoreCase("paper")){return new PaperPrinter();} else if(type.equalsIgnoreCase("web")){return new WebPrinter();} else if(type.equalsIgnoreCase("Screen")){return new ScreenPrinter();}return null;}
}

创建一个Factory生成器/生产器类,通过传递Shape或Printer等信息来获取工厂。

class FactoryProducer {public static AbstractFactory getFactory(String choice){if(choice.equalsIgnoreCase("SHAPE")){return new ShapeFactory();} else if(choice.equalsIgnoreCase("Printer")){return new PrinterFactory();}return null;}
}

下面的代码展示了如何使用抽象工厂模式。

public class Main {public static void main(String[] args) {//get shape factoryAbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");//get an object of Shape CircleShape shape1 = shapeFactory.getShape("CIRCLE");//call draw method of Shape Circleshape1.draw();//get an object of Shape RectangleShape shape2 = shapeFactory.getShape("RECTANGLE");//call draw method of Shape Rectangleshape2.draw();//get an object of Shape Square Shape shape3 = shapeFactory.getShape("SQUARE");//call draw method of Shape Squareshape3.draw();//get printer factoryAbstractFactory printerFactory = FactoryProducer.getFactory("printer");Printer printer1 = printerFactory.getPrinter("Paper");printer1.print();Printer printer2 = printerFactory.getPrinter("Web");printer2.print();Printer printer3 = printerFactory.getPrinter("Screen");printer3.print();}
}

上面的代码生成以下结果。

【Java教程】Java 抽象工厂模式相关推荐

  1. JAVA设计模式之抽象工厂模式

    本文继续介绍23种设计模式系列之抽象工厂模式. 前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式-抽象工厂模式,还是以汽车的制造为例. 例子背景: 随着客户的要求越来越高,宝马车需 ...

  2. Java设计模式:抽象工厂模式

    1. 定义 抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类:具体的工厂负责实现具体的产品实例. 抽象工厂模式与工厂 ...

  3. Java设计模式之 抽象工厂模式实验报告书

    目录 Java设计模式之 1 抽象工厂模式实验报告书 1 实验四:抽象工厂模式 2 一.实验目的 2 二.实验内容 2 三.实验步骤 2 3.1抽象工厂模式:电器工厂 2 3.2 car 6 3.3 ...

  4. Java 设计模式之抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...

  5. 最简单java设计模式:抽象工厂模式

    前言 在前一篇文章讲解了一下简单工厂模式和工厂方法模式,这篇文章再把抽象工厂模式讲解一下. 一.什么是抽象工厂模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提 ...

  6. java抽象工厂设计模式_23种经典设计模式的java实现_1_抽象工厂模式

    抽象工厂模式的适用: 一个系统要独立于它的产品的创建.组合和表示时. 一个系统要由多个产品系列中的一个来配置时. 当你要强调一系列相关的产品对象的设计以便进行联合使用时. 当你提供一个产品类库,而只想 ...

  7. Java常用设计模式————抽象工厂模式

    简介 每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例. 与工厂方法模式的区别 工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构,因此抽象工厂模式在结构上要比工厂方 ...

  8. JAVA设计模式之抽象工厂模式和代理模式

    目录 一.抽象工厂模式 1.1.模式的定义与特点 1.2.模式的结构 二.代理模式 2.1代理模式的定义与特点 2.2代理模式的结构与实现 一.抽象工厂模式 1.1.模式的定义与特点 抽象工厂(Abs ...

  9. JAVA设计模式之——抽象工厂模式

    文章目录 一.类型 二.定义 三.参与者 四.类图 五.示例 六.适用情况 参考文章 一.类型 创建型模式 二.定义 定义一个接口,用于创建一组相关或有依赖关系的对象,而且无需指定这些对象具体的类. ...

  10. Java设计模式:抽象工厂模式--农场的季节生产对应水果举例

    /*** 农场的抽象.不同季节生产不同的蔬菜和水果.*/ public interface Farm {//不同季节,不同蔬菜和水果.int WINTER = 1; //冬季.int SUMMER = ...

最新文章

  1. php curl 404,PHP使用curl判断404(网页是否存在)方法
  2. vs 服务容器中已存在服务_容器中某Go服务GC停顿经常超过100ms排查
  3. 吴恩达深度学习笔记3-Course1-Week3【浅层神经网络】
  4. 雨课堂知识点总结(十七)
  5. CF 1025C Plasticine zebra
  6. 时间转化_2个关键因素决定福鼎白茶的后期转化
  7. Pandas Series 1
  8. 图论(一)—— 基本概念
  9. c语言规定学号长度,c语言第1-9章基本概念练习题ans(最全).docx
  10. C# 集合类 :(Array、 Arraylist、List、Hashtable、Dictionary、Stack、Queue)
  11. chown –r mysql:mysql_Linux服务器部署系列之二—MySQL篇
  12. rdkit GetAtoms获取化合物每个位置的索引;rdkit FindMCS大公共相同结构 找不同化合物之间的差异
  13. 深度学习中的有监督学习和无监督学习
  14. 按键精灵执行cmd命令_学会用按键精灵制作脚本:用脚本运行可执行程序
  15. 《研究生英语科技论文写作》学习笔记
  16. Gopher协议与ssrf
  17. C++后台开发面试题总结(涉及C++基础、多线程多进程、网络编程等)
  18. gvim 安装pathogen
  19. 【教程】关于打开一些exe文件时,打开方式为microsoft store的解决办法
  20. 什么是深度可分离卷积及深度可分离卷积的优势

热门文章

  1. 使用java实现MD5码算法
  2. 如何用MAYA 制作人物动画 使人物动作更加真实流畅
  3. teamtalk mysql.h_新版TeamTalk完整部署教程
  4. java api接口签名验证失败_简单API接口签名验证
  5. 51/52单片机 TCON控制字及TMOD寄存器
  6. 页面置换算法 (全)
  7. 用冰封服务器安装系统,用冰封PE来安装windows纯净版系统
  8. Code::Blocks下载及其汉化教程
  9. 手机通过WiFi控制电脑
  10. cactiez mysql密码_CactiEZ中文解决方案+使用教程(1)