工厂模式的一点疑问

最近看了一下设计模式中的工厂模式,对于其中的工厂方法模式有一点疑问,在此记录,方便以后学习所需。

首先工厂模式是为了满足开闭原则:扩展开放,修改封闭。

对比一下简单工厂模式和工厂方法模式,会发现简单工厂模式中的createBMW()方法中包含的选择生成方法的switch语句,在工厂方法模式中的工厂类里没地方放,因此只能移交给客户,由客户来做switch。好了,那么问题来了(挖掘机哪家强?),在工厂方法中真的满足开闭原则吗?是的,工厂类和产品类满足,可是客户类呢?增加一个产品就必须到客户类里修改switch语句,这不是一样违反了修改封闭吗?这样的话还不如把switch语句拿出来再弄一个类,姑且先叫它choose类吧。这时候再仔细看工厂方法模式,假设,我们将工厂子类和产品子类合到一起,那么是不是和简单工厂模式有点像呢?事实上,为什么不可以合到一起呢?那么实际上工厂方法模式真的比简单工厂模式好吗?最多理解其增加了一个适配层。

盗用几张宝马案例的图片

简单工厂模式:

工厂方法模式:

抽象工厂模式:

下面再记录一下对抽象工厂模式的认识。

我的理解它也和工厂方法一样,应该把switch语句从客户类里抽出来。后面由于工厂子类还要选择多个产品来组合成目标产品,所以工厂子类还是有存在的必要的,这就像是二级客户了,本质上感觉有点像简单工厂里还有简单工厂。

时间: 2024-09-27 17:49:34

工厂模式的一点疑问的相关文章

设计模式之abstract factory工厂模式的理解

研究了一下工厂模式,对它的应用场景和网上的众多说法进行了思考,总结如下. 几个疑问点: 1.网上说用factory,就可以不用自己new了,但是疑问在于,不直接依赖,转而间接依赖,作用是什么?节省了代码量?易于扩展? 2.书上说,一个系统要独立于它的产品的创建.组合和表示时.一个系统要由多个产品系列中的一个来配置时.当你要强调一系列相关的产品对象的设计以便进行联合使用时.当你提供一个产品类库,而只想显示它们的接口而不是实现时,就应该使用工厂模式.但是疑问在于,这他妈说的都是啥? 于是开始了我的思

工厂模式 ioc dom4j 反射之我的一点理解

工厂模式 //工厂模式我的理解 //第一次调用没有实例化的对象时 会去内存中查找(栈) //如果没有找到,就去xml配置中查找className和他相同的类名 //找到的话就让工厂进行实例化,初始化对象 //没找到的话就空指针异常 公产模式就是ioc(inversion of control) 和hibernate的控制反转有点像  就是把自身不维护关系,交给别人来维护关系 dao层,service层在编码时只声明对象,而把实例化对象的权利交给工厂,工厂通过配置文件来配置类(对象)的信息, 然后

设计模式学习-抽象工厂模式

1.定义 提供接口,创建一系列相关或独立的对象,而不指定这些对象的具体类. 2.类图 3.代码示例 1 package com.zhaoyangwoo.abstractfactory; 2 3 /** 4 * Created by john on 16/5/2. 5 * @author wuzhaoyang 6 * <p> 7 * 抽象工厂:多个抽象产品类,派生出多个具体产品类:一个抽象工厂类,派生出多个具体工厂类:每个具体工厂类可创建多个具体产品类的实例. 8 * 即提供一个创建一系列相关或

从接口、抽象类到工厂模式再到JVM来总结一些问题

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 Java的Class.forName(xxx); Java里创建对象的几个方式总结 Java类加载机制总结 Java WEB的三层架构和MVC的关系 工厂方法模式总结 抽象工厂模式总结 一道面试题的分析 一个服务提供者框架的学习 接口的另一常用法:策略模式 参考资料 先看这样一个场景:某个果园里现在有

Java工厂模式(Factory模式)

工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量. 我们以类Sample为例,

Java设计模式之工厂模式(Factory模式)介绍(转载)

原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工厂.Java工厂模式举例等内容,需要的朋友可以参考下 工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经

25、【C++基础】工厂模式

C++的工厂模式分为三种:简单工厂模式.工厂模式和抽象工厂模式 简单工厂模式 简单工厂模式是工厂模式中最简单的一种,他可以用比较简单的方式隐藏创建对象的细节,一般只需要告诉工厂类所需要的类型,工厂类就会返回需要的产品类,但客户端看到的只是产品的抽象对象,无需关心到底是返回了哪个子类.客户端唯一需要知道的具体子类就是工厂子类.除了这点,基本是达到了依赖倒转原则的要求. 假如,我们不用工厂类,只用AbstractProduct和它的子类,那客户端每次使用不同的子类的时候都需要知道到底是用哪一个子类,

Spring中如何使用工厂模式实现程序解耦?

目录 1. 啥是耦合.解耦? 2. jdbc程序进行解耦 3.传统dao.service.controller的程序耦合性 4.使用工厂模式实现解耦 5.工厂模式改进 6.结语 @ 1. 啥是耦合.解耦? 既然是程序解耦,那我们必须要先知道啥是耦合,耦合简单来说就是程序的依赖关系,而依赖关系则主要包括 1. 类之间的依赖 2. 方法间的依赖 比如下面这段代码: public class A{ public int i; } public class B{ public void put(A a)

简单工厂模式&amp;工厂方法模式&amp;抽象工厂模式

简单工厂模式 先来看一个问题,我们要给手机买一个手机壳,因为各种手机形状不一致,所以手机壳有很多种类,下面用代码的形式处理这个问题 String phoneName = "xxx"; // 所有的shell都是继承自PhoneShell,这里偷个懒就不写了. PhoneShell shell = null; if("Iphone".equals(phoneName)){ shell = new IphoneShell(); }else if("huawei