Java研究之学习设计模式-简单工厂模式详解



简介:

从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

类图:

从UML类图中,可以看出,简单工厂模式的意思,就是把一个类内部,需要生成的部分,提取出来,变为一个工厂,通过工厂来new对象。

假设我们要吃苹果了,我们可以在代码中new一个苹果出来;当我们需要吃香蕉了,我们在代码中new一个香蕉出来。这种做法你会不会觉得麻烦,new的事情都要自己做。所以可以把new的事情交给一个工厂来做(顾名思义,工厂是生产东西的地方)。而简单工厂通过传进来的参数,决定生产什么产品。

言语表达不清,请看下面的代码:

代码:

当我们一开始没有使用简单工厂模式,可能,我们会这样做,看下面的代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

classapple{

publicapple(){

System.out.println("生产了一个苹果");

}

}

classbanana{

publicbanana(){

System.out.println("生产了一个香蕉");

}

}

publicclassMain{

publicstaticvoidmain(String[]args){

applea=newapple();

bananab=newbanana();

}

}

我们需要什么,则自己在代码中new出来,这样有时候是很方便的,但有时候,我们想想这样的情况,代码比较复杂,我们希望很多事情不是交给主程序来做,而是把new这样的事情交给一个工厂来做,这样,在后面更改的时候,我就不用一个一个在主程序代码中去审查,而是在工厂代码中统一更改。

看简单工厂模式的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

classfruit{

}

class appleextendsfruit{

publicapple(){

System.out.println("生产了一个苹果");

}

}

class bananaextendsfruit{

publicbanana(){

System.out.println("生产了一个香蕉");

}

}

class Factory{

//通过传进来的参数str,来决定生产什么产品

publicfruitcreate(Stringstr){

if(str.equals("apple"))

returnnewapple();

if(str.equals("banana"))

returnnewbanana();

returnnull;

}

}

publicclassMain{

publicstaticvoidmain(String[]args){

Factoryfac=newFactory();

applea=(apple)fac.create("apple");//传进apple,生产apple

bananab=(banana)fac.create("banana");

}

}

希望上述代码能够表述清楚。

为什么要简单工厂模式?看下面简单工厂模式的优点:

这个模式的核心是工厂,这个工厂类有自己的逻辑,就是他懂得根据传进来的参数决定创造什么样的产品,客户端(就是调用工厂类方法的)不用管创建对象的事情,仅仅是知道告诉工厂类,他要什么,然后得到什么。这样实现了创建对象责任的分割。

简单工厂模式的缺点:

没有完美的东西嘛,而且简单工厂离完美还差得远呢!这个模式关键缺点就是,工厂类好像是一个上帝一样,创造了所有。从科学的角度上说,上帝是不存在的。所以,当所有的创造对象都放在一个工厂类的时候,可想而知,这个工厂类是多么的复杂。所以,当产品多的时候,慎重考虑是否使用该模式。

Java研究之学习设计模式-简单工厂模式详解

时间: 2025-01-02 09:55:03

Java研究之学习设计模式-简单工厂模式详解的相关文章

Java研究之学习设计模式-抽象工厂模式详解

 简介:          当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产[1] 品角色都有两个具体产品.抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化.每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例. 每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构:而抽象工厂模式针对的是多个产品等级结构.(摘自百度百科) 话语说得太抽象,程序员最好的表示方式

Java研究之学习设计模式-多例模式详解

 介绍: 所谓的多例模式,实际上就是单例模式(回顾看这里)的自然推广,作为对象的创建模式,多例模式有以下特点: 1可以有多个实例 2多例类必须自己创建,管理自己的实例,并向外界提供自己的实例. 从上面的特点中,可以体会多例模式与单例模式的不同.单例模式只允许一个实例的存在. 单例类图: 多例类图: 类图更直观的表示了多例类,该多例类会提供多个实例,实例的数量我们是可以自己控制的,如果数量不多的话,实例就可以当做是类的内部实例变量:如果实例很多,那么可以用数组,或者可变长度的数组来进行存储.下

设计模式之 简单工厂模式详解

定义:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现.             定义中最重要的一句话就是,由一个工厂对象决定创建出哪一种产品类的实例,这个LZ在下面会专门举一个现实应用中的例子去展现. 另外给出简单工厂模式的类图,本类图以及上面的

JAVA 设计模式之 工厂模式详解

一.简单工厂模式 简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类 的实例.属于创建型模式,但它不属于 GOF,23 种设计模式 (参考资料: http://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_Type). 简单工厂模式适用于的场景: 1.适用 于工厂类负责创建的对象较少的场景,    2.且客户端只需要传入工厂类的参数,对于如何创 建对象的逻辑不需要关心. 简单工厂模式缺点: 1

设计模式学习(二)-简单工厂模式

---恢复内容开始--- 简单工厂设计模式 简单工厂模式定义: 简单工厂设计模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂主要分为如下几个角色 抽象产品(abstract product):为所有具体产品的抽象表现,一般为抽象类 具体产品(product):为抽象产品的具体实现 生成产品工厂(facto

设计模式- 简单工厂模式、工厂方法模式及其比较

简单工厂模式及实例 前言工大有许多同学是做java的,大家都知道java最大的优点是它的完全OO化和它在多年的发展过程中吸收和总结了许多先进的框架与模式,其中工厂模式就是最常用的模式之一.下面我想将我在学习和实践过程中对工厂模式的认识与了解介绍给大家.由于笔者能力限制,在实践中也没参与过什么大的项目,笔者参与过的项目用到的工厂模式主要是简单工厂模式(Simple Factory)和工厂方法模式(Factory Method),所以笔者在本文主要介绍的是这两种模式.准备知识在OO设计领域,我们知道

跟着ZHONGHuan学习设计模式--简单工厂

转载请注明出处!!!http://blog.csdn.net/zhonghuan1992 所有配套代码均在github上:https://github.com/ZHONGHuanGit/DesignPattern 跟着ZHONGHuan学习设计模式 简单工厂 简介: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.   类图: 从

1.大话设计模式-简单工厂模式

编程时一门技术,更是一门艺术 简单工厂模式利用面向对象方式通过继承.封装.多态把程序的耦合度降低,设计模式使得程序更加灵活,容易修改,易于复用. 下面是服务器计算器代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace DesignModel 8 { 9 /// <s

PHP经典设计模式--简单工厂模式

PHP经典设计模式--简单工厂模式 pfinal介绍 本来我们要获取一个类的实例,需要用到new关键字.但是如果new 直接写到业务代码里,一个类在很多地方都实例化过,以后要是这个类出了什么问题,比如要改个名字(实际中,你更多的可能是修改构造函数方法),那么就尴尬了,需要改很多地方. 工厂模式,顾名思义,就是不用new来获得实例,而是把业务类放进一个工场类里,由工厂(类)『生产』出对应的实例. 实现 SimpleFactory.php <?php namespace DesignPatterns