Java设计模式之抽象工厂
概述
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
设计模式可以分为三大类,分别是创建型、结构型和行为型。
创建型
抽象工厂设计模式(Abstract Factory Pattern)
围绕一个超级工厂而创建其它工厂。
应用场景
当要系统有一类产品,并且系统只消耗其中一种产品。例如形状有形状的工厂,颜色有颜色的工厂。其中一个抽象的大工厂包含形状和颜色的两个工厂。

优点
当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
缺点
不容易扩展
代码如下
//图形接口及其实现
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("我是圆形");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("我是正方形");
}
}
//颜色接口及其实现
public interface Color {
void getColor();
}
public class Blue implements Color {
@Override
public void getColor() {
System.out.println("我是蓝色");
}
}
public class Red implements Color {
@Override
public void getColor() {
System.out.println("我是红色");
}
}
//抽象工厂可以生产颜色或者图形
public abstract class AbstractFactory {
public abstract Color getColor(String color);
public abstract Shape getShape(String shape);
}
//图形类工厂
public class ShapeFactory extends AbstractFactory{
public Shape getShape(String shape) {
if("circle".equals(shape))
return new Circle();
if("square".equals(shape))
return new Square();
return null;
}
@Override
public Color getColor(String color) {
return null;
}
}
//颜色工厂
public class ColorFactory extends AbstractFactory{
public Color getColor(String color) {
if("red".equals(color)) {
return new Red();
}
if("blue".equals(color)) {
return new Blue();
}
return null;
}
@Override
public 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;
}
}
注:本博客参考了菜鸟教程中的设计模式
http://www.runoob.com/design-pattern/abstract-factory-pattern.html
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设计模式之——抽象工厂
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...
- java设计模式(三)--抽象工厂模式
转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...
- [译]Java 设计模式之抽象工厂
(文章翻译自Java Design Pattern: Abstract Factory) 抽象工厂模式针对工厂模式增加了抽象层.如果我们使用抽象工厂模式和工厂模式比较的话,很明显抽象工厂模式增加了一个 ...
- Java 设计模式之抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...
- [java] java 设计模式(2):抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- Java设计模式(3)——抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象. 一.产品族和产品等级结构 为 ...
随机推荐
- eclipse弃坑记第一篇之在idea上配置Tomcat环境并创建Javaweb项目的详细步骤原创
IntelliJ IDEA是一款功能强大的开发工具,在代码自动提示.重构.J2EE支持.各类版本工具(如git.svn.github).maven等方面都有很好的应用. IntelliJ IDEA有免 ...
- vue-router query 传对象需要JSON.stringify()转化
先说一下场景-微信公众号网页开发中,一个文章列表点击跳转详情页.代码如下 1 2 3 this.$router.push({path: '/wx/detail', query: {res: data} ...
- R语言学习——处理数据对象的实用函数
length(object) # 显示对象中元素/成分的数量 dim(boject) # 显示某个对象的维度 str(object) # 显示某个对象的结构 class(object) # 显示某个对 ...
- mysql 有没有参数都报错“mysql: unknown option”
报错: [root@XXXX tmp]# mysql -uroot -pmysql: unknown option '--You have new mail in /var/spool/mail/ro ...
- 工具篇-Spring boot JPA多数据源
写这篇博文是因为这个东西坑太多,首先说明下边实现的多数据源不是动态切换的,应该算是静态的. 坑一.pom文件 pom中spring boot以及mysql connector的版本一定要注意. < ...
- 目前在segmentfault写博客
不是打广告.只是由于自己体验之类的关系,转移到segmentfault了,地址 https://segmentfault.com/u/linlinma,欢迎关注和交流
- Entity Framework Core系列之DbContext(删除)
上一篇我们介绍了Entity Framework Core系列之DbContext(修改),这一篇我们介绍下删除数据 修改实体的方法取决于context是否正在跟踪需要删除的实体. 下面的示例中con ...
- 2018 C++ Teaching Assistant Summary
期末考结束后就留校开始了科研,最近刚回家休息了两三天,整理了思绪,准备补上这一篇拖延了一个多月的助教小结. 早在一年多前我上栋哥这门课时,我就十分乐意给予同学帮助,无论是技术上的,还是说思想上的(也可 ...
- Winform数据库连接app.config文件配置
1.添加配置文件 新建一个winform应用程序,类似webfrom下有个web.config,winform下也有个App.config;不过 App.config不是自动生成的需要手动添加,鼠标右 ...
- gitignore的使用
gitignore的作用是忽略文件的提交,被加入到gitignore中的文件不会被提交到文件服务器 通常需要添加到.gitignore的文件有: (1)缓存相关文件,编译相关文件,运行时相关文件 (2 ...