工厂模式之简单工厂、工厂方法、抽象工厂分析对比
工厂模式有三种分类,简单工厂(也叫静态工厂)、工厂方法模式、抽象工厂
一、简单工厂
简单工厂通俗的说就是提供一个类,这个类中的某个方法根据入参的不同来创建并返回实现了同一个接口的不同具体子类(产品)。
java实现如下:
1.首先定义一个接口(抽象产品)并定义核心方法
public interface Message {
void sendMessage();
}
2.编写基于该接口的不同实现类(具体产品)
class Sms implements Message {@Overridepublic void sendMessage() {System.out.println("send Sms msg");} } class Email implements Message {@Overridepublic void sendMessage() {System.out.println("send Email msg");} }
3.编写工厂类,工厂类一般有公用静态方法,根据入参创建不同的实现类
public class SimpleFactory {public static Message createMsg(String msgType){Message msg=null;if ("sms".equals(msgType)){msg=new Sms();}else{msg=new Email();}return msg;}
}
4.简单工厂测试
public static void main(String[] args) {SimpleFactory.createMsg("sms").sendMessage(); }
二、工厂方法模式
工厂方法模式去掉了简单工厂的静态属性,分化为抽象工厂和具体工厂。抽象工厂与最后创建的具体实现类(具体产品)无关,应用程序不直接调用。具体工厂是抽象工厂的具体类或实现类,根据业务逻辑创建不同的实现类(具体产品),一般一个具体产品对应一个具体工厂。还是以消息发送为例,工厂方法模式如下:
1.创建抽象产品和具体产品,同简单工厂模式第1、2步
--------------------------------------------------------略-----------------------------------------------
2.创建抽象工厂
public interface FactoryMessage {Message createMessage(); }
3.实现抽象工厂,对没一个具体产品创建一个具体产品的工厂
//短信工厂类
public class FactorySms implements FactoryMessage{@Overridepublic Message createMessage() {return new Sms();} }
//邮件工厂类
public class FactoryEmail implements FactoryMessage {@Overridepublic Message createMessage() {return new Email();} }
4.应用程序测试
public static void main(String[] args) {//短信工厂类 生产 短信产品FactoryMessage smsMessageFactory=new FactorySms();Message smsMessage=smsMessageFactory.createMessage();smsMessage.sendMessage();//邮件工厂类 生产 邮件产品FactoryMessage mailMessageFactory=new FactoryEmail();Message mailMessage=mailMessageFactory.createMessage();mailMessage.sendMessage(); }
三、抽象工厂模式
抽象工厂模式是工厂方法模式的升级版,一般用来创建一组相关或相互依赖的对象(产品),相对工厂方法抽象工厂的诞生是对象(产品)复杂度提升,产品本身包含多个相互关联的对象(组件产品)。
为了说明抽象工厂,此模式以笔记本电脑为例,假设笔记本有两个组件构成:显示器和CPU,戴尔笔记本有两款产品DellA(显示屏Sharpu和CPU Amdx)、DellB(显示屏Sharpv和CPU Intelx),这样由于笔记本产品包含显示器和处理器两个相互关联的组件产品,所以需要两个抽象产品角色显示器和CPU,而目前两个最终产品DellA和DellB为两个具体生产笔记本的工厂,抽象工厂模式如下:
1.创建抽象产品和具体产品
//显示器及其具体型号
public interface Monitor {
}
public class Sharpu implements Monitor {
public Sharpu(){
System.out.println("制造-->Sharpu");
}
}
public class Sharpv implements Monitor {
public Sharpv(){
System.out.println("制造-->Sharpv");
}
}
//CPU及其具体型号
public interface CPU {
}
public class Amdx implements CPU {
public Amdx(){
System.out.println("制造-->Amdx");
}
}
public class Amdx implements CPU {
public Amdx(){
System.out.println("制造-->Amdx");
}
}
2.抽象工厂
//创建抽象工厂
public interface AbstractFactory {
Monitor createMonitor();
CPU createCPU();
}
3.具体工厂类
//为DellA笔记本生产配件
public class FactoryDellA implements AbstractFactory {
@Override
public MonitorcreateMonitor() {
return new Sharpu();
}
@Override
public CPUcreateCPU() {
return new Amdx();
}
}
//为DellB笔记本生产配件
public class FactoryDellB implements AbstractFactory {
@Override
public MonitorcreateMonitor() {
return new Sharpv();
}
@Override
public CPUcreateCPU() {
return new Intelx();
}
}
4.测试
public static void main(String[] args) {
//生产dellA的配件
AbstractFactory dellAFactory=new FactoryDellA();
dellAFactory.createCPU();
dellAFactory.createMonitor();
//生产dellB的配件
AbstractFactory dellBFactory=new FactoryDellB();
dellBFactory.createCPU();
dellBFactory.createMonitor();
}
总结:三种工厂模式,简单工厂当有新产品或者新业务出现时需要修改工厂的核心主逻辑,不利于业务扩展;工厂方法模式扩展新业务时只需要增加新的具体工厂类即可,但是当业务复杂时会出现大量的具体工厂,造成系统臃肿;抽象工厂更利于调用双方解耦,一般应用于复杂系统业务
工厂模式之简单工厂、工厂方法、抽象工厂分析对比相关推荐
- java工厂模式定义宠物_Java设计模式之抽象工厂模式
抽象工厂模式特点 抽象工厂模式与工厂模式最大的区别是每个单独的产品是一个工厂模式,而多个不同产品交互则是抽象工厂模式,抽象工厂模式通常要运用工厂模式的方法.通常,工厂模式的所有产品的创建都放在这个工厂 ...
- 抽象工厂模式java_Java描述设计模式(04):抽象工厂模式
一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 1) 抽象工厂模式:定义了一 ...
- php 抽象工厂模式,PHP设计模式(三)抽象工厂模式(Abstract Factory)
一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...
- java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式
抽象工厂模式是在工厂方法模式之上的有一次升级,以便能够处理更加复杂的对象创建场景.因此也是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 有朋友可能会想了,工厂方法模式已经是对简单工厂模式的具体 ...
- 抽象工厂模式设计模式_创新设计模式:抽象工厂模式
抽象工厂模式设计模式 抽象工厂模式是一种创新模式,是与构建器和工厂模式一起最受欢迎的模式之一. 使用创建模式是为了创建对象,而不是直接使用构造函数创建对象. 抽象工厂模式提供了一种封装一组具有共同主题 ...
- Java工厂模式(简单工厂、工厂方法、抽象工厂)详解
工厂模式是一种非常常用的创建型设计模式,其提供了创建对象的最佳方式.在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象. 1.工厂模式的理解 1.1.工厂模式的分类 工厂模 ...
- java 三种工厂模式(简单工厂+工厂方法+抽象工厂)
一.简单工厂模式 概述 简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的 实例,被创建的实例通常都具有共同的父类.因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因 ...
- C++设计模式之一 工厂模式(简单工厂、工厂和抽象工厂)
今天开始这个系列之前,心里有些恐慌,毕竟园子里的高手关于设计模式的经典文章很多很多,特别是大侠李会军.吕震宇 老师的文章更是堪称经典.他们的文笔如行云流水,例子活泼生动,讲解深入浅出.好在他们都是用C ...
- 简单工厂 工厂方法 抽象工厂
[找到一篇好文章] 作者:海粟007 原文址:http://www.cnblogs.com/Seasky/archive/2009/04/28/1385609.html 今天开始这个系列之前,心里有些 ...
- 设计模式-工厂模式(简单工厂,工厂模式,抽象工厂)
1.工厂模式的初心,本质 工厂模式:本质是创建类的实例,将类的实例的创建和使用隔离. 模型特点:创建时根据参输的不同返回不同的实例.而这些个不同的类型的实例,都是同一个基类的实例. 简单工厂的特点: ...
最新文章
- 如何编写一个可升级的智能合约
- 为栈实现高效的max操作
- 《Java编程思想》《Think in Java》笔记
- SQL Server 的通用分页显示存储过程
- MongoDB 基础浅谈
- Java 8过滤器,地图,收集和流示例
- 面试被问进线程的区别
- oracle 10g SQL* Plus主机字符串
- CodeForces 589J Cleaner Robot
- 用于磁盘I / O性能SQL Server监视工具
- myBatis的xml映射文件中传入list集合与数组做条件
- PHP Windows系统下调用OpenOffice
- BZ OJ 2818 Gcd (欧拉函数)
- LanguageTool性能简单测试分析
- node express框架实现下载文件功能
- 将pem证书转换为crt和key
- 苹果手机连接电脑服务器传文件,实用!三种iPhone与Windows电脑互传文件操作技巧,...
- ios html5键盘弹出视图上移,ios 软键盘弹出, 页面整体上移问题
- IPX 、 IPEX 、 UFL连接器
- stimulsoft 变量
热门文章
- 解决windows防火墙无法更改某些设置 错误代码0X800
- Mac数据恢复工具:Syncios Data Recovery
- 鸿蒙支持机型710部分,鸿蒙OS或将支持麒麟710及以后机型 严控应用推送,确保系统纯净...
- cpu核数(cpu核数和频率哪个重要)
- img图片在限定尺寸下等比缩放;点击查看原图
- 通过 js 设置点击查看原图
- layui 表格中实现照片预览,点击查看原图
- Winforms 2020界面开发新纪元——Map、Pivot Grid控件升级
- 事情很重要却总不想开始怎么办
- vivo手机安装失败解决方式