简单工厂模式是什么,使用简单工厂模式的优点是什么?

2021-01-11 21:24:33 字数 5059 阅读 4423

1楼:无极罪人

专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。它又称为静态工厂方法模式,属于类的创建型模式。

简单工厂模式的uml类图(见右图)

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

该模式中包含的角色及其职责

工厂(creator)角色

简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

抽象(product)角色

简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(concrete product)角色

简单工厂模式的特点:

简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。

使用简单工厂模式的优点是什么?

2楼:追寻复制者

简单工厂

模式的优点:

1、工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;

2、简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。

3、客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。

4、通过引入配置文件,可以在不修改任何客户端**的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

3楼:匿名用户

工厂模式就相当于创建实例对象的new,我们经常要根据类class生成实例对象,如a a=new a(). 工厂模式也是用来创建实例对象的,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

类sample为例,要创建sample的实例对象:

sample sample=new sample();

可是,实际情况是,通常我们都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等

首先,我们想到的是,可以使用sample的构造函数,这样生成实例就写成:

sample sample=new sample(参数);

但是,如果创建sample实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段**,如果也写入构造函数中,那你的**很难看了

初始化工作如果是很长一段**,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于java面向对象的原则,面向对象的封装(encapsulation)和分派(delegation)告诉我们,尽量将长的**分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。

我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从sample的构造函数中分离出去。

你想如果有多个类似的类,我们就需要实例化出来多个类。这样**管理起来就太复杂了。

这个时候你就可以采用工厂方法来封装这个问题。

不能再用上面简单new sample(参数)。还有,如果sample有个继承如mysample, 按照面向接口编程,我们需要将sample抽象成一个接口.现在sample是接口,有两个子类mysample 和hissample

sample mysample=new mysample();

sample hissample=new hissample();

采用工厂封装:

public class factory

} 那么在你的程序中,如果要实例化sample时.就使用

sample samplea=factory.creator(1);

举个更实际的例子,比如你写了个应用,里面用到了数据库的封装,你的应用可以今后需要在不同的数据库环境下运行,可能是oracle,db2,sql server等,那么连接数据库的**是不一样的,你用传统的方法,就不得不进行**修改来适应不同的环境,非常麻烦,但是如果你采用工厂类的话,将各种可能的数据库连接全部实现在工厂类里面,通过你配置文件的修改来达到连接的是不同的数据库,那么你今后做迁移的时候**就不用进行修改了。

我通常都是用xml的配置文件配置许多类型的数据库连接,非常的方便。ps:工厂模式在这方面的使用较多。

4楼:匿名用户

防止对数据的破坏,实现多态。

5楼:匿名用户

可以动态创建对象~~

简单工厂就是生产对象的工厂

工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

6楼:灬nico丶

工厂模式,简单工厂模式,抽象工厂模式三者区别如下:

1、首先,三者的创建对象是不相同的。

进行创建对象时,“工厂模式”不使用new创建对象,而是使用factory模式;“简单工厂模式”则是通过fw模式来建立对象;“抽象工厂模式”使用迭代模式来创建对象。

2、其次,三者的定义变量不同。

“工厂模式”在使用时可以随时设置变量,不用提前进行设置。“简单工厂模式”中需要使用参数或者配置文件等已经定义好的变量,然后才能进行下一步的操作。“抽象工厂模式则”则需要每次增加产品时,进行修改类方法。

3、最后,三者的接口数量不同。“工厂模式”可以使用两个接口以及三个接口,“简单工厂模式”只可以使用一个接口。“抽象工厂模式”则可以使用无限个接口。

7楼:纸墨成殇

1、创建对象不同。创建对象时,“工厂模式”使用factory模式替代使用new创建对象;“简单工厂模式”使用fw模式建立对象;“抽象工厂模式”则使用迭代模式创建对象。

2、定义变量不同。“工厂模式”不用事先定义变量,使用时随时引用便可。“简单工厂模式”,使用参数或者配置文件等事先定义好的变量,然后利用分支判断初始化具体产品类并返回。

“抽象工厂模式则”不符合“开发-封闭”原则,每次增加产品,都需要修改类方法。

3、接口数量不同。“工厂模式”有两至三个接口。“简单工厂模式”只有一个接口。抽象工厂模式理论上具有无限个接口。

扩展资料

编程使用“工厂模式”的优缺点:

1、优点:

方便扩展算法,比如增加一个开根号的功能,我们只要继续继承运算类就行了,同时客户端也就是使用者不知道具体的实现细节,只要给出相关标示符,工厂函数就马上给他创建一个他想要的实体就行了。减少了使用者和功能开发者之间的耦合度。

2、缺点:

在进行扩展的时候,我们要更改工厂函数里面的那个分支语句switch,这样便破坏了ocp,而且当有多级结构继承的时候,简单工厂就会因为只能对应平行一层记得继承,不得不使得好多类继承同一个接口,然后得到a*b这么多的工厂实体可能,工厂函数很难维护。

8楼:百度用户

工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在了具体工厂类里面。在以后扩展产品的时候方便很多,只需要添加一个工厂类,一个产品类,就能方便的添加产品,而不需要修改原有的**。而在简单工厂中,如果要增加一个产品,则需要修改工厂类,增加if/else分支,或者增加一个case分支,工厂模式符合软件开发中的ocp原则(open close principle),对扩放,对修改关闭。

抽象工厂模式:这个模式我总是感觉和builder模式非常相似。

工厂方法模式提供的是对一个产品的等级模式,,而抽象工厂方法提供的是对多个产品的等级模式,注意,这里的多个具体产品之间是相互耦合的,也就是说这里的抽象工厂提供的产品之间是存在某种联系的。

有人做如下的比较:

工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。

一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类可以创建多个具体产品类的实例。

区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

下面是一个形象的比喻:

无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用。拿一个生产水杯(cup)的工厂举例:起初,不用工厂模式,我必须在生产水杯之前知道水杯的材料和形状等水杯的所有特征才能生产,这就是我们的new cup();这个cup必须是具体的。

厂主发现同一形状的被子,只是材料不同,如一个是玻璃(glass)的,一个是瓷(china)的,但是确要两条生产线,显然有资源浪费的嫌疑。现在厂主生产杯子时先不让生产线知道我要产的是玻璃的还是瓷的,而是让它在不知道具体材料的情况下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形状的具体杯子了。但是很可惜,java并不能new一个抽象的cup,所以就有了简单工厂模式。

原来是cup cup=new cup;现在是******cupfactory.createcup(string cupname),根据cup的名字生产cup,而createcup返回的是一个实现了 cup接口或抽象类的具体cup。简单抽象工厂模式有一个问题,就是当我现在想生产一个同样形状的铁杯时,工厂里并没有定义相应的处理流程,只能更改createcup方法,这就不合理了。

我现在只是想生产铁杯,你只要在最后的时候把玻璃原料换成铁的不就行了吗,干嘛还要更改整条生产线呢?于是就有了工厂模式。原来生产线在生产模具的时候还要考虑是为玻璃杯生产的模具还是为铁杯生产的模具,现在它不用管了。

cupfactory.createcup()创建cup.cupfactory是接口或抽象类。

实现它的具体子类会创建符合cup接口的具体cup。那么现在厂主想要生产水壶(kettle),用工厂模式就不得不再造一条水壶生产线,能不能在水杯生产线同时生产水壶呢?这就是抽象工厂模式。

为什么要用简单工厂模式,使用简单工厂模式的优点是什么?

1楼 匿名用户 保证 的可复用 各个子类完全分离 避免了更高 无意中把原来好的源 改错 对于开发公司来说 个人自用负责自己对应的子类 就行了 公司也不用把别的子类给你 如果现在公司要求你为公司的薪资管理系统做维护,原来只有技术人员 月薪 ,市场销售人员 底薪 提成 ,经理 年薪 股份 三种运算算法,...

工厂方法模式的模式简介

1楼 黮囻 工厂方法 factory method 模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下...

在设计模式中什么是工厂方法模式,设计模式 工厂模式 分为哪几种?

1楼 匿名用户 工厂方法模式 factory method 是一种常用的对象创建型设计模式 此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦 复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂 具体工厂 抽象产品 具体产品 设计模式 工...