Java设计模式之——抽象工厂
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
步骤 1
为形状创建一个接口。
packagecom.demo.mode.mode01.abstractFactory.Shape.java public interface Shape { void draw(); }
步骤 2
创建实现接口的实体类。
package com.demo.mode.mode01.abstractFactory.Rectangle.java public class Rectangle implements Shape { public void draw() { System.out.println("execute Rectangle::draw()method."); } } package com.demo.mode.mode01.abstractFactory.Square.java public class Square implements Shape { public void draw() { System.out.println("execute Circle::draw()method."); } } package com.demo.mode.mode01.abstractFactory.Circle.java public class Circle implements Shape { public void draw() { System.out.println("execute Circle::draw()method."); } }
步骤 3
为颜色创建一个接口。
package com.demo.mode.mode01.abstractFactory.Color.java public interface Color { // 填充颜色 void fill(); }
步骤4
创建实现接口的实体类。
package com.demo.mode.mode01.abstractFactory.Red.java public class Red implements Color { public void fill() { System.out.println("execute Red::fill()method."); } } package com.demo.mode.mode01.abstractFactory.Green.java public class Green implements Color { public void fill() { System.out.println("execute Green::fill()method."); } } package com.demo.mode.mode01.abstractFactory.Blue.java public class Blue implements Color { public void fill() { System.out.println("execute Blue::fill()method."); } }
步骤 5
为 Color 和 Shape 对象创建抽象类来获取工厂。
package com.demo.mode.mode01.abstractFactory.AbstractFactory.java public abstract class AbstractFactory { abstract Color getColor( String color); abstract Shape getShape( String shape); }
步骤 6
创建扩展了 AbstractFactory 的工厂类,基于给定的信息生成实体类的对象。
package com.demo.mode.mode01.abstractFactory.ShapeFactory.java public class ShapeFactory extends AbstractFactory{ /** * 使用 getShape 方法获取形状类型的对象 * @author xg.qiu<br/> * @since JDK 1.7 * @time Jul 28, 2015 * @param shapeType 形状类型 * @return shape对象 */ public Shape getShape(String shapeType) { Shape shape = null; if ("Circle".equals(shapeType)) { shape = new Circle(); } else if ("Rectangle".equals(shapeType)) { shape = new Rectangle(); } else if ("Square".equals(shapeType)) { shape = new Square(); } return shape; } public Color getColor(String color) { return null; } } package com.demo.mode.mode01.abstractFactory.ColorFactory.java public class ColorFactory extends AbstractFactory { /** * 使用 getColor 获得颜色 * @author xg.qiu<br/> * @since JDK 1.7 * @time Jul 28, 2015 * @param colorStr 颜色字符串 * @return color对象 */ public Color getColor(String colorStr) { Color color = null; if ("Red".equalsIgnoreCase(colorStr)) { color = new Red(); } else if ("Green".equalsIgnoreCase(colorStr)) { color = new Green(); } else if ("Blue".equalsIgnoreCase(colorStr)) { color = new Blue(); } return color; } public Shape getShape(String shape) { return null; } }
步骤 7
创建一个工厂创造器/生成器类,通过传递形状或颜色信息来获取工厂。
package com.demo.mode.mode01.abstractFactory.FactoryProducer.java public class FactoryProducer { public static AbstractFactory getFactory(String choice){ AbstractFactory factory = null; if("Shape".equalsIgnoreCase(choice)){ factory = new ShapeFactory(); }else if("Color".equalsIgnoreCase(choice)){ factory = new ColorFactory(); } return factory; } }
步骤 8
使用 FactoryProducer 来获取 AbstractFactory,通过传递类型信息来获取实体类的对象。
package com.demo.mode.mode01.abstractFactory.AbstractFactoryPatternDemo.java public class AbstractFactoryPatternDemo { public static void main(String[] args) { //1.获取形状 AbstractFactory shapeFactory = FactoryProducer.getFactory("Shape"); //2.获取颜色 AbstractFactory colorFactory = FactoryProducer.getFactory("Color"); //3.传递形状 Shape shape =shapeFactory.getShape("Circle"); //4.传递颜色 Color color =colorFactory.getColor("Red"); //5.绘制形状 shape.draw(); //6.填充颜色 color.fill(); } }
步骤 9
验证输出。
execute Circle::draw() method. execute Red::fill() method.
Java设计模式之——抽象工厂的更多相关文章
- Java 设计模式之抽象工厂模式(三)
原文地址:Java 设计模式之抽象工厂模式(三) 博客地址:http://www.extlight.com 一.前言 上篇文章 <Java 设计模式之工厂模式(二)>,介绍了简单工厂模式和 ...
- Java设计模式系列-抽象工厂模式
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755412.html 一.概述 抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别. ...
- java设计模式之抽象工厂模式
上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...
- java设计模式(三)--抽象工厂模式
转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...
- [译]Java 设计模式之抽象工厂
(文章翻译自Java Design Pattern: Abstract Factory) 抽象工厂模式针对工厂模式增加了抽象层.如果我们使用抽象工厂模式和工厂模式比较的话,很明显抽象工厂模式增加了一个 ...
- Java设计模式之抽象工厂
概述 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计模式 ...
- Java 设计模式之抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...
- [java] java 设计模式(2):抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- Java设计模式(3)——抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象. 一.产品族和产品等级结构 为 ...
随机推荐
- vmware linux nat模式设置静态ip
网上资料很多,但是都不怎么实用,这里给大家总结一下.nat模式上网.因为nat本身就能上网为什么还要设置ip.这有点自找麻烦.但是在集群这是必须的.要么你搭建伪分布,要么至少具有三台物理机器.为了节省 ...
- linux vi详解
刚开始学着用linux,对vi命令不是很熟,在网上转接了一篇. vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指 ...
- 接口结构+一个selenium例子
大家今天可以先建一个项目目录,明天我们在码代码: 我看好多朋友都在看selenium方面的东西,在这里给大家一个和讯网自动发文章的selenium代码,有兴趣的朋友可以试试,船长已亲测可用,不明白的地 ...
- BZOJ4543 [POI2014]Hotel加强版
题意 有一个树形结构,每条边的长度相同,任意两个节点可以相互到达.选3个点.两两距离相等.有多少种方案? 数据范围:n<=100000 分析 参照小蒟蒻yyb的博客. 我们先考虑一个\(O(n^ ...
- vue踩坑记录
一.element resetFields 方法报错 网上查的解决方案 resetForm(formName) { this.$nextTick(() => { this.$refs[formN ...
- Git 的分支和标签规则
Git 的分支和标签规则 分支使用 x.x 命名,不加 V. 标签使用 v1.x.x-xxx 方式命名.(v 为小写) 分支和标签名不可重复.
- oracle之 v$sql_monitor 监视正在运行的SQL语句的统计信息
11g中引入了新的动态性能视图V$SQL_MONITOR,该视图用以显示Oracle监视的SQL语句信息.SQL监视会对那些并行执行或者消耗5秒以上cpu时间或I/O时间的SQL语句自动启动,同时在V ...
- bzoj 3157 && bzoj 3516 国王奇遇记——推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...
- Mongodb简单介绍安装
具体详细内容,请查阅 Mongodb官方文档 一.简单介绍 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. M ...
- git 修改提交说明 commit message
修改最近一次的提交说明 1.代码未推送到远程服务器 $ git commit --amend 此指令会打开文本编辑器,第二行就是提交说明,修改完后按 ctrl+x 退出,后面根据提示操作. 2.代码已 ...