【Java教程】Java 抽象工厂模式
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 抽象工厂模式相关推荐
- JAVA设计模式之抽象工厂模式
本文继续介绍23种设计模式系列之抽象工厂模式. 前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式-抽象工厂模式,还是以汽车的制造为例. 例子背景: 随着客户的要求越来越高,宝马车需 ...
- Java设计模式:抽象工厂模式
1. 定义 抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类:具体的工厂负责实现具体的产品实例. 抽象工厂模式与工厂 ...
- Java设计模式之 抽象工厂模式实验报告书
目录 Java设计模式之 1 抽象工厂模式实验报告书 1 实验四:抽象工厂模式 2 一.实验目的 2 二.实验内容 2 三.实验步骤 2 3.1抽象工厂模式:电器工厂 2 3.2 car 6 3.3 ...
- Java 设计模式之抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...
- 最简单java设计模式:抽象工厂模式
前言 在前一篇文章讲解了一下简单工厂模式和工厂方法模式,这篇文章再把抽象工厂模式讲解一下. 一.什么是抽象工厂模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提 ...
- java抽象工厂设计模式_23种经典设计模式的java实现_1_抽象工厂模式
抽象工厂模式的适用: 一个系统要独立于它的产品的创建.组合和表示时. 一个系统要由多个产品系列中的一个来配置时. 当你要强调一系列相关的产品对象的设计以便进行联合使用时. 当你提供一个产品类库,而只想 ...
- Java常用设计模式————抽象工厂模式
简介 每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例. 与工厂方法模式的区别 工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构,因此抽象工厂模式在结构上要比工厂方 ...
- JAVA设计模式之抽象工厂模式和代理模式
目录 一.抽象工厂模式 1.1.模式的定义与特点 1.2.模式的结构 二.代理模式 2.1代理模式的定义与特点 2.2代理模式的结构与实现 一.抽象工厂模式 1.1.模式的定义与特点 抽象工厂(Abs ...
- JAVA设计模式之——抽象工厂模式
文章目录 一.类型 二.定义 三.参与者 四.类图 五.示例 六.适用情况 参考文章 一.类型 创建型模式 二.定义 定义一个接口,用于创建一组相关或有依赖关系的对象,而且无需指定这些对象具体的类. ...
- Java设计模式:抽象工厂模式--农场的季节生产对应水果举例
/*** 农场的抽象.不同季节生产不同的蔬菜和水果.*/ public interface Farm {//不同季节,不同蔬菜和水果.int WINTER = 1; //冬季.int SUMMER = ...
最新文章
- php curl 404,PHP使用curl判断404(网页是否存在)方法
- vs 服务容器中已存在服务_容器中某Go服务GC停顿经常超过100ms排查
- 吴恩达深度学习笔记3-Course1-Week3【浅层神经网络】
- 雨课堂知识点总结(十七)
- CF 1025C Plasticine zebra
- 时间转化_2个关键因素决定福鼎白茶的后期转化
- Pandas Series 1
- 图论(一)—— 基本概念
- c语言规定学号长度,c语言第1-9章基本概念练习题ans(最全).docx
- C# 集合类 :(Array、 Arraylist、List、Hashtable、Dictionary、Stack、Queue)
- chown –r mysql:mysql_Linux服务器部署系列之二—MySQL篇
- rdkit GetAtoms获取化合物每个位置的索引;rdkit FindMCS大公共相同结构 找不同化合物之间的差异
- 深度学习中的有监督学习和无监督学习
- 按键精灵执行cmd命令_学会用按键精灵制作脚本:用脚本运行可执行程序
- 《研究生英语科技论文写作》学习笔记
- Gopher协议与ssrf
- C++后台开发面试题总结(涉及C++基础、多线程多进程、网络编程等)
- gvim 安装pathogen
- 【教程】关于打开一些exe文件时,打开方式为microsoft store的解决办法
- 什么是深度可分离卷积及深度可分离卷积的优势