抽象工厂和工厂方法模式
工厂方法模式
简单的来说,工厂方法模式就是将简单工厂模式解耦,将工厂类细分,使得我们添加品牌的时候不用去修改源代码,只需要自己添加一个类就可以了,简单工厂模式可以看下我的上篇博客。
同样的案例
顾客要去4s店买车,有BMW,Aodi两种选择
工厂可以有奥迪的工厂,可以有宝马的工厂,我们先画个图分析一下
那么我们就可以先简单的写出来这三个类
奥迪工厂负责生产奥迪的车,故返回奥迪4s店AodiCar
宝马的工厂负责生产宝马的车,故返回BMWCar
有奥迪的4s店,有宝马的4s店,但是他们都是卖车的,或是售后,修车,有相同的服务
以下为服务这个接口
奥迪4s店继承这个接口,并卖出车
宝马4s店继承这个接口,并卖出车
所以我们的整体结构图就很清楚了
此工厂方法模式的优点是:
当你想增加一个品牌时,只需要自己添加一个工厂类和4s点就行了,不需要改动其他的代码,更符合开闭原则。
每个工厂类只用负责自己的产品,更符合单一职责原则,大大的降低了代码的耦合度
但是工厂方法模式有很大的缺点,就是我们每次需要新加一个品牌时都至少需要新添加一个工厂类和一个4s店类,使得java文件越来越多了,并且每个工厂只生产一种商品,造成了资源浪费
2.抽象工厂模式
拿以上案例来说,我们可以有一个工厂接口,来负责去生产卡车还是轿车,其中有两个方法
一个跑车接口,负责生产跑车
一个轿车接口,负责生产轿车
宝马跑车类继承跑车接口就拥有了造跑车的能力,宝马轿车类继承轿车接口就拥有了造轿车的能力
同理奥迪跑车类继承跑车接口就拥有了造跑车的能力,奥迪轿车类继承轿车接口就拥有了造轿车的能力
奥迪工厂类继承工厂类就拥有了造跑车和轿车的能力
同理宝马工厂类继承工厂类就拥有了造跑车和轿车的能力
此时消费者类运行代码为
以下附上整体代码的结构图
抽象工厂和工厂方法模式相关推荐
- 工厂方法模式和抽象工厂模式
工厂方法模式和抽象工厂模式 工厂方法模式 抽象工厂模式 总结: 工厂方法模式 #include <string> #include <iostream>// Abstract ...
- 工厂方法模式与抽象工厂模式的区别
工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类. 一个抽象工厂类,可以派生出多个具体工厂类. 每个具体工厂类只能创建一个具体产品类的实例. 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以 ...
- 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细
1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...
- FactoryMethod工厂方法模式升级成AbstractFactory抽象工厂模式
具体参考抽象工厂(AbstractFactory)模式-创建型模式,本文在FactoryMethod工厂方法模式(创建型模式)的基础上进行业务进一步抽象,不做详细原理介绍. 1.在FactoryMet ...
- 抽象工厂模式-与-工厂方法模式区别
转自:http://blog.csdn.net/wangwenhui11/article/details/3955125 --------------------------------- 对于jav ...
- 021 设计模式之工厂方法模式,抽象工厂模式的区别
简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...
- 简单工厂模式、工厂方法模式、抽象工厂模式 之间的对比
先看各自的结构: 简单工厂模式(SimpleFactory Mode): 简单工厂模式的思路是,首先我们把一些共性的东西(算法)拿出来,进行抽象,比如加减乘除.然后我们在定义一个类作为工厂类,工厂类的 ...
- 抽象工厂模式java_面试官:说一下静态工厂模式,工厂方法模式,抽象工厂的区别吧...
静态工厂模式 用生活中的场景类比一下这三种模式,假如你想学习Java视频,你得自己到处去找资料,找资料是一个繁琐的过程,过一段时间你又想学Python视频了,你还得去找资料.现在你在学校上学,你想学J ...
- 设计模式——工厂方法模式和抽象工厂模式
2019独角兽企业重金招聘Python工程师标准>>> 为什么使用工厂方法? Duck duck=new MallardDuck(); //使用接口让代码更具有弹性 //但是还是建立 ...
- Java设计模式-工厂方法模式和抽象工厂模式
工厂方法模式定义: 即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)."一对一"的关系 1,一抽象工厂类派生出多个具体工厂类: 2, ...
最新文章
- 2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数
- python正则表达式_Python正则表达式简记和re库!
- android实现华为手机拍照上传_继续引领手机拍照 华为将带来液态镜头
- SQL Server数据库中Date/Time 时间格式的转换[转]
- c语言p1-melepeo,学生选课系统c语言程序代码
- 计算机答辩答不上来怎么回答,答辩答不上来怎么办
- Webapi管理和性能测试工具WebBenchmark
- docker学习之-什么是docker
- java 导出表格打包zip文件下载_asyExcel导出excel并打包成zip压缩包下载
- FtpWebRequest(转)---关于C/S中文件的上传,下载,获得文件列表
- 移动开发 or web 前端?
- 计划任务,机器码与注册码,Web服务
- 测试网速_怎样测试两台电脑之间的网速
- 运行 c++ 程序出现“Failed to execute ”.exe“ Error 0:操作成功完成
- SWFObject 设置透明 Flash
- 基于PHP+Web的旅游网站设计与实现
- python之开三次方根的计算
- C语言程序设计————学习知识归纳总结(四)
- SQL service的事务提交和回滚
- Spring 多数据源配置详解
热门文章
- 2023轻薄投影仪首选:极米Z6X Pro入手超值!
- 做一个商业网站需要准备什么,需要多少钱?
- 自动化测试和软件测试的区别,自动化测试和手动测试之间的区别
- office正在更新,请稍后(无法正常启动,错误0xc0000142)
- 强化云原生基础服务,焱融科技 YRCloudFile 与秒云完成产品兼容性互认证
- 计算机保持在线的几种方法,还在为智能盒子上电影软件收费烦恼?教你几个盒子上看大片的方法...
- 自动化测试 | 这些常用测试平台,你们公司在用的是哪些呢?
- 导数的定义、性质与求导
- Jupyter制作slides
- AI动物识别专家系统-实验报告