简单工厂模式

时间:2024-06-19 07:17:45编辑:小松

工厂方法模式和抽象工厂模式的区别

工厂方法模式:




抽象工厂模式:

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。

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

工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

GOF《设计模式》写的很清楚,工厂方法是由子类自行决定实例化那个类,而抽象工厂是自己决定实例化哪个类。至于是组合还是继承还是实现接口都无所谓。根本区别在于是自己实例化还是子类实例化。


[create_time]2022-06-23 22:48:09[/create_time]2022-07-07 18:38:49[finished_time]1[reply_count]0[alue_good]天然槑17[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.7a3084cb.ATR7THZ25E9Imhl_JAp6UA.jpg?time=4576&tieba_portrait_time=4576[avatar]TA获得超过8968个赞[slogan]这个人很懒,什么都没留下![intro]14[view_count]

工厂模式和抽象工厂模式的区别

  工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。

  抽象工厂模式也就是不仅生产鼠标,同时生产键盘。也就是PC厂商是个父类,有生产鼠标,生产键盘两个接口。戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。创建工厂时,由戴尔工厂创建。

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

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


[create_time]2022-12-23 18:41:47[/create_time]2023-01-01 06:09:25[finished_time]1[reply_count]0[alue_good]真果粒不真2333[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.790dda60.zxCg2d1hdCtSSZz5wTed2w.jpg?time=6892&tieba_portrait_time=6892[avatar]TA获得超过373个赞[slogan]这个人很懒,什么都没留下![intro]8[view_count]

谁能帮简单介绍一下工厂模式呢?

你好,很高兴能解答你的问题。首先工厂模式是软件开发中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式主要的意图是:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。案列1:您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。案例2:日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。希望能帮到你,谢谢!

[create_time]2022-04-09 09:02:20[/create_time]2022-04-24 08:58:29[finished_time]1[reply_count]0[alue_good]重庆新华电脑学校[uname]https://cambrian-images.cdn.bcebos.com/6c943cfc521b550bd60294795f09ddfb_1539246804578.jpeg[avatar]学动漫、设计、电竞、电商、短视频、软件等[slogan]重庆新华电脑学校隶属于新华教育集团,经重庆市人力资源和社会保障局审批成立的重庆地区大规模IT人才教育基地。是国家信息化教育全国示范基地,中国IT教育十大影响力品牌学校。[intro]39[view_count]

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

简单工厂模式的优点:1、工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;2、简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。3、客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。4、通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。扩展资料:简单工厂模式的缺点:1、由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。2、使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。3、系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。4、简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。参考资料来源:百度百科-简单工厂模式

[create_time]2022-12-08 16:59:36[/create_time]2022-12-23 16:59:36[finished_time]1[reply_count]0[alue_good]乾莱信息咨询[uname]https://pic.rmb.bdstatic.com/bjh/user/62ac8245037c35cef5dd05b07789a9ca.jpeg[avatar]百度认证:内蒙古乾莱科技官方账号[slogan]这个人很懒,什么都没留下![intro]15[view_count]

Java的工厂模式有哪一些,分别有什么作用,一般用在哪些地方?

我简单的说下,举个例子,当我们的程序结构比较繁杂时,比如有100个类,而类中又有很多方法,这些方法之间都互相有依赖关系,也就是一个方法之间的某段逻辑处理需要用到另一个类中的代码逻辑,这种时候对于整个程序而言是非常不利于开发的(我们需要考虑到很多类、方法之间的耦合问题),那么就有一个概念了,也就是面对接口编程。通俗的说就是把类中的方法封装起来,外部调用的人完全不需要考虑方法是如何实现的,但是这样做也有一个不好的地方,我们的接口是不提供方法实现的,而需要在类中实现接口的方法。那么问题产生了,我们在new接口对象的时候需要明确的知道他的实例类。
想象一下,如果程序在继续庞大,接口非常多,接口实例类非常多,这样又会产生我们之前的问题(我们需要考虑到很多类、方法之间的耦合问题)那么这个时候就产生了一中设计思想,也就是工厂模式,这种模式的核心思想就是管理接口的实例对象,把接口和实例对象之间的关系封装起来处理,外部需要用到某个接口的实例时,由工厂进行分配,而不需要关注具体是哪个实例。
如果你做到比较复杂的程序时你应该就能体会到了。


[create_time]2020-01-08 05:46:19[/create_time]2019-12-18 05:23:13[finished_time]1[reply_count]3[alue_good]能岑姓阑[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.835bd31a.n685VujSZ3_9ssxBZlGLOA.jpg?time=10584&tieba_portrait_time=10584[avatar]TA获得超过3万个赞[slogan]这个人很懒,什么都没留下![intro]19[view_count]

求java工厂模式的一个简单代码例子,尽量简单

这个应该比较简单一点。某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式。现使用工厂方法模式设计该系统,并写出相应Java代码。interface Log{ public void writeLog();}class FileLog implements Log{ public void writeLog(){ System.out.println("文件记录"); }}class DatabaseLog implements Log{ public void writeLog(){ System.out.println("数据库记录"); }}interface LogFactory{ public Log createLog();}class FileLogFactory implements LogFactory{ public Log createLog(){ return new FileLog(); }}class DatabaseLogFactory implements LogFactory{ public Log createLog(){ return new DatabaseLog(); }}public class Client{ public static void main(String[] args) { try{ Log log; LogFactory factory; //这里可以改成使用DOM和Java反射机制读取XML文件,获取工厂类名 factory=new DatabaseLogFactory (); log=factory.createLog(); log.writeLog(); } catch(Exception e){ System.out.println(e.getMessage()); } }}

[create_time]2016-09-29 11:09:24[/create_time]2016-09-29 11:14:27[finished_time]1[reply_count]4[alue_good]匿名用户[uname]https://iknow-base.cdn.bcebos.com/yt/bdsp/icon/anonymous.png?x-bce-process=image/quality,q_80[avatar][slogan]这个人很懒,什么都没留下![intro]1400[view_count]

工厂模式的好处 简单工厂模式的优点

工厂模式是我们最常用的实例化对象模式了,工厂模式在Java程序系统可以说是随处可见。它的好处有:

1、工厂模式可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任。

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

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


[create_time]2022-07-20 16:08:20[/create_time]2022-08-01 09:30:58[finished_time]1[reply_count]0[alue_good]一袭可爱风1718[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.5395ef26.n9N8duaooP2iWjvaRSNI0A.jpg?time=4591&tieba_portrait_time=4591[avatar]TA获得超过9801个赞[slogan]这个人很懒,什么都没留下![intro]5[view_count]

工厂模式的好处 简单工厂模式的优点

工厂模式是我们最常用的实例化对象模式了,工厂模式在Java程序系统可以说是随处可见。它的好处有:

1、工厂模式可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任。

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

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


[create_time]2023-01-25 02:15:42[/create_time]2023-02-03 11:53:02[finished_time]1[reply_count]0[alue_good]夏至adbuae3ea[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.f823920d.-aEdRKgvRcsCi-HPE5GSVw.jpg?time=6708&tieba_portrait_time=6708[avatar]TA获得超过409个赞[slogan]这个人很懒,什么都没留下![intro]1[view_count]

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

工厂模式,简单工厂模式,抽象工厂模式三者区别如下:1、首先,三者的创建对象是不相同的。进行创建对象时,“工厂模式”不使用new创建对象,而是使用Factory模式;“简单工厂模式”则是通过fw模式来建立对象;“抽象工厂模式”使用迭代模式来创建对象。2、其次,三者的定义变量不同。“工厂模式”在使用时可以随时设置变量,不用提前进行设置。“简单工厂模式”中需要使用参数或者配置文件等已经定义好的变量,然后才能进行下一步的操作。“抽象工厂模式则”则需要每次增加产品时,进行修改类方法。3、最后,三者的接口数量不同。“工厂模式”可以使用两个接口以及三个接口,“简单工厂模式”只可以使用一个接口。“抽象工厂模式”则可以使用无限个接口。扩展资料:简单工厂模式优缺点1、优点:工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品。简单工厂模式通过这种做法实现了对责任的分割。当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。2、缺点:系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂,违背了"开放--封闭"原则(OCP)。另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。参考资料来源:百度百科-工厂模式参考资料来源:百度百科-简单工厂模式参考资料来源:百度百科-抽象工厂模式

[create_time]2022-12-11 21:00:16[/create_time]2022-12-26 21:00:16[finished_time]1[reply_count]0[alue_good]惠企百科[uname]https://pic.rmb.bdstatic.com/bjh/user/343825d09bee196abf9cec8955c23e80.jpeg[avatar]百度认证:北京惠企网络技术有限公司官方账号[slogan]惠企百科网是一家科普类综合网站,关注热门中文知识,集聚互联网精华中文知识,本着自由开放、分享价值的基本原则,向广大网友提供专业的中文知识平台。[intro]20[view_count]

Python设计模式:简单工厂模式

简单工厂模式又称之为静态工厂方法,属于创建型模式。 在简单工厂模式中,可以根据传递的参数不同,返回不同类的实例。简单工厂模式定义了一个类,这个类专门用于创建其他类的实例,这些被创建的类都有一个共同的父类。 简单工厂模式:通过接口创建对象,且不会暴露对象创建逻辑 在设计模式中主要用于抽象对象的创建过程,让用户可以指定自己想要的对象而不必关心对象的实例化过程。 这样做的好处是用户只需通过固定的接口而不是直接去调用类的实例化方法来获得一个对象的实例,隐藏了实例创建过程的复杂度,解耦了生产实例和使用实例的代码,降低了维护的复杂性。 工厂类负责创建的对象比较少。简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,但是如果产品过多时,会导致工厂代码非常复杂。 简单工厂模式的要点就在于当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。 看待任何事物都需要用辩证的观点去看,任何事物都有两面性,简单工厂模式也是如此。有优点也有缺点。      优点:用户只需要传入具体产品,就可以得到实例化的类,不需要知道具体实现过程,一定程度上节省了理解成本。 缺点:如果具体产品角色很多的时候,定义简单工厂就会比较麻烦。不利于扩展,具体产品比较复杂时也许缺点就大于优点了,还是需要理性选择。

[create_time]2022-07-24 04:20:44[/create_time]2022-08-01 17:01:31[finished_time]1[reply_count]0[alue_good]华源网络[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.dda57034.Ka_C7foUo-WdM44LpZjJrw.jpg?time=707&tieba_portrait_time=707[avatar]TA获得超过4548个赞[slogan]这个人很懒,什么都没留下![intro]0[view_count]

工厂模式的编程开发

工厂模式定义我们以类Sample为例, 如果我们要创建Sample的实例对象:Sample sample=new Sample();可是,实际情况是,通常我们都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等。首先,我们想到的是,可以使用Sample的构造函数,这样生成实例就写成:Sample sample=new Sample(参数);但是,如果创建sample实例时所做的初始化工作不是像赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码很难看了(就需要Refactor重整)。为什么说代码很难看,初学者可能没有这种感觉,我们分析如下,初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有悖于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间耦合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。在本例中,首先,我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。这时我们就需要Factory工厂模式来生成对象了,不能再用上面简单new Sample(参数)。还有,如果Sample有个继承如MySample, 按照面向接口编程,我们需要将Sample抽象成一个接口.ISample是接口,有两个子类MySample 和HisSample .我们要实例化他们时,如下:ISample mysample=new MySample();ISample hissample=new HisSample();随着项目的深入,Sample可能还会"生出很多儿子出来", 那么我们要对这些儿子一个个实例化,更糟糕的是,可能还要对以前的代码进行修改:加入后来生出儿子的实例.这在传统程序中是无法避免的.但如果你一开始就有意识使用了工厂模式,这些麻烦就没有了.

[create_time]2016-05-11 00:48:03[/create_time]2016-05-25 21:07:36[finished_time]1[reply_count]1[alue_good]异鸣柒柒0016[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.85b5282f.BLbcbwreJ3aA67038O6JXA.jpg?time=3631&tieba_portrait_time=3631[avatar]TA获得超过114个赞[slogan]这个人很懒,什么都没留下![intro]59[view_count]

java简单工厂模式是什么

简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
那么简单工厂模式是在什么场景下使用呢,下面就以本人的理解举例说明:

  就拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证、域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中验证用户)。那么自然的做法就是建立一个各种登录方式都适用的接口,如下图所示:




public interface Login {
//登录验证
public boolean verify(String name , String password);
}




public class DomainLogin implements Login {

@Override
public boolean verify(String name, String password) {
// TODO Auto-generated method stub
/**
* 业务逻辑
*/
return true;
}

}





public class PasswordLogin implements Login {

@Override
public boolean verify(String name, String password) {
// TODO Auto-generated method stub
/**
* 业务逻辑
*/
return true;
}

}



我们还需要一个工厂类LoginManager,根据调用者不同的要求,创建出不同的登录对象并返回。而如果碰到不合法的要求,会返回一个Runtime异常。



public class LoginManager {
public static Login factory(String type){
if(type.equals("password")){

return new PasswordLogin();

}else if(type.equals("passcode")){

return new DomainLogin();

}else{
/**
* 这里抛出一个自定义异常会更恰当
*/
throw new RuntimeException("没有找到登录类型");
}
}
}



测试类:



public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String loginType = "password";
String name = "name";
String password = "password";
Login login = LoginManager.factory(loginType);
boolean bool = login.verify(name, password);
if (bool) {
/**
* 业务逻辑
*/
} else {
/**
* 业务逻辑
*/
}
}
}



简单工厂模式的结构如下图:





我们可以设想一下真实的场景,如果把上面的Test当做一个servlet的话,当客户端发起登录请求——>请求交给服务端的Servlet——>Servlet根据客户端传递的loginType调用工厂类LoginManager的factory()方法——>factory()方法根据参数loginType创建相应的登录验证类(DomainLogin或PasswordLogin)并返回——>登录验证类调用方法verify()验证用户名密码是否正确



假如不使用简单工厂模式则验证登录Servlet代码如下(假设Test为一个Servlet,变量loginType、name、password表示从客户端传递过来的参数):



public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub

String loginType = "password";
String name = "name";
String password = "password";
//处理口令认证
if(loginType.equals("password")){
PasswordLogin passwordLogin = new PasswordLogin();
boolean bool = passwordLogin.verify(name, password);
if (bool) {
/**
* 业务逻辑
*/
} else {
/**
* 业务逻辑
*/
}
}
//处理域认证
else if(loginType.equals("passcode")){
DomainLogin domainLogin = new DomainLogin();
boolean bool = domainLogin.verify(name, password);
if (bool) {
/**
* 业务逻辑
*/
} else {
/**
* 业务逻辑
*/
}
}else{
/**
* 业务逻辑
*/
}
}
}



上面的代码会不会很蛋疼啊。。。呵呵

《JAVA与模式》一书中使用java.text.DataFormat类作为简单工厂模式的典型例子叙述。

简单工厂模式的优点

  模式的核心是工厂类。这个类含有必要的逻辑判断,可以决定在什么时候创建哪一个登录验证类的实例,而调用者则可以免除直接创建对象的责任。简单工厂模式通过这种做法实现了对责任的分割,当系统引入新的登录方式的时候无需修改调用者。

简单工厂模式的缺点

  这个工厂类集中了所以的创建逻辑,当有复杂的多层次等级结构时,所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,整个系统都会受到影响。


[create_time]2017-10-06 16:20:40[/create_time]2014-02-27 15:33:20[finished_time]6[reply_count]0[alue_good]似灵杉0Ey[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.60f6a066.vDXqoNo4NoWJaFItC_Apaw.jpg?time=3865&tieba_portrait_time=3865[avatar]TA获得超过312个赞[slogan]这个人很懒,什么都没留下![intro]3954[view_count]

上一篇:智障女

下一篇:北京杂技团