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)——抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象. 一.产品族和产品等级结构 为 ...
随机推荐
- Session学习
Session学习 Session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JESSIONID对应这个服务器中的一个Session对象,通 ...
- 让一个 csproj 项目指定多个开发框架
可移植类库.共享项目..NET Standard 项目都能够帮我们完成跨多个 .NET SDK 的单一项目开发,但它们的跨 SDK 开发都有些限制.现在,我们又有新的方式能够跨多个 .NET SDK ...
- 看到就是赚到!Selenium完整框架——告别2017
这个框架大家可以拿过去直接用——作为送给大家的元旦礼物——船长对你们简直太好了! 学了这么长时间,又是定位,又是发邮件,还有乱七八糟的unittest,现在时候后把东西用起来了~而且学会了这一篇你就可 ...
- kong 了解
Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能.Kong 有两个主要组件: Kong Server :基于nginx 的服务器,用来接收 API 请求. Apac ...
- MOSS 2013研究系列---隐藏Ribbon
我们在开发Sharepoint 2013 的时候,常常需要隐藏Ribbon,那个Ribbon是属于Office的特征,但是我们做门户的时候,大家都不希望看见到它,但是我们又离不开它,以管理的身份进行设 ...
- 用 Linux blkid 命令查找块设备详情
今天我们将会向你展示如何使用 lsblk 和 blkid 工具来查找关于块设备的信息,我们使用的是一台安装了 CentOS 7.0 的机器. lsblk lsblk 是一个 Linux 工具,它会显示 ...
- Hibernate学习4—关联关系一对多映射
一.班级学生一对多映射实现(单向) Class 1 * Student 一对多 在学生多的一方,配置一的对象: com.cy.model.Class: package com.cy.model; ...
- struts2学习(6)自定义拦截器-登录验证拦截器
需求:对登录进行验证,用户名cy 密码123456才能登录进去: 登录进去后,将用户存在session中: 其他链接要来访问(除了登录链接),首先验证是否登录,对这个进行拦截: com.cy.mod ...
- 如何使用 J2EE 连接器架构实现企业应用
JCA (J2EE 连接器架构,javaConnector Architecture)是对J2EE标准集的重要补充.因为它注重的是将Java程序连接到非Java程序和软件包中间件的开发.连接器特指基于 ...
- nginx的编译安装以及启动脚本编写
Nginx的编译安装和启动脚本的编写 Nginxd的功能强大,可以实现代理.负载均衡等企业常用的功能.下面介绍一下nginx的编译安装方法: 1. 下载 官方下载地址:http://nginx.org ...