什么是工厂模式相关知识
-
谈谈我对Spring 的理解Spring 实现了工厂模式的工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为 BeanFactory(实际上是一个接口),在程序中通常BeanFactory 的子类ApplicationContext。 Spring 相当于一个大的工厂类,在其配置文件中通过<bean>元素配置用于创建实例对象的类 名和实例对象的属性。 Spring 提供了对IOC 良好支持,IOC 是一种编程思想,是一种架构艺术,利用这种思想 可以很好地实现模块之间的解耦。IOC 也称为DI(Depency Injection),什么叫依赖注入呢? 譬如,Class Prog
-
【java设计模式】(4)---工厂模式(案例说明)设计模式之工厂模式工厂模式分三种:简单工厂模式(也叫静态工厂模式),工厂方法模式(也叫多形性工厂),抽象工厂模式(也叫工具箱)下面会一一举例。一、概念1、什么是工厂模式 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂模式关心的是最终产出(创建)的对象, 而不关心创建的过程。2、工厂模式的优点工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。同时会给你系统带来更大的可扩展性和尽量少的修改量。(下面第三点会举例说明)3、什么情况使用工厂模式这也是具体的说明工厂模式优点。我个人认为在任何需要生成复杂对象的地方,都可以考虑使用工厂模式。我们以线程池的举例。ThreadPoolExecutor类的四个构造方法。public class ThreadPoolExecutor extends AbstractExecutorService { &nbs
-
设计模式-工厂模式一(简单工厂模式)关于设计模式相关的讲解应该有很多。在这里只是简单写一下自己的理解。做个记忆加深,若有可能再跟上一点交流。其实在工厂模式之前,应该先大概理解什么是工厂模式,为什么一个工厂模式还分为简单工厂模式、工厂方法模式与抽象工厂模式。工厂模式顾名思义就是类似于现实社会的工厂一样的模式(其实设计模式很多都是来源于生活,做了抽象。之后又去指导生活)。在封建社会里,大家都是自给自足。什么东西都是自己来创建(new)。造成了资源的浪费,社会也进步有限。最主要的是,慢慢的大家发现,自己做的没有别人家的好。我仅需要原来耗费材料的部分就可以去交换其他人创建的更好的物品。这就是刚开始的简单工厂模式的雏形。举个栗子:/** * 简单的牛奶接口,后续的其他实现都会有牛奶的基本属性(白白的,液体) */public interface IMilk { public String createMilk(); }因为我们可能会需要不同的牛奶,所以会有不同的牛奶实
-
工厂模式和抽象工厂的区别是什么?今天聊一聊大家最耳熟能详的设计模式,『工厂模式』。实际上这个设计模式有三个变种,分别是『简单工厂模式』、『工厂方法模式』以及『抽象工厂模式』,可能大部人所熟知的是前两种,抽象工厂模式有一定的场景限制,很少出现在大家的视野中,不过今天我们一并谈一谈。 简单工厂模式 简单工厂说白了就是一个超级工厂,他可以生产各种各样的产品,产品之间无关联,比如: public interface SimpleFactory { //生产一个冰箱 Refrigerator createRefiger(); //生产一个空调 AirConditioni
什么是工厂模式相关课程
什么是工厂模式相关教程
- 工厂模式 工厂模式是平时开发过程中最常见的设计模式。工厂模式解决类的实例化问题,它属于创建型模式。工厂模式也经常会和其他设计模式组合使用。试想你去麦当劳买一个汉堡。你只需要告诉收银员要一个xx汉堡。过一会就会有一个此类型的汉堡被制作出来。而你完全不需要知道这个汉堡是怎么被制作出来的。这个例子中你就是客户端代码,麦当劳就是工厂,负责生产汉堡。汉堡是接口,而具体的某一种汉堡,比如说香辣鸡腿堡,就是实现了汉堡接口的类。我们继续通过另外一个例子,深入理解工厂模式。现在我们给某款音乐软件开发一个推荐功能。需求是能够根据用户选择的音乐风格,推荐不同风格的歌曲清单。那么你打算怎么实现呢?
- 抽象工厂模式 抽象工厂模式用来解决产品族的实例化问题。比如说现在有个家居设计软件,通过软件模拟房间,摆放各种虚拟的家具,看效果如何。我们可以放入电视柜、茶几、餐桌、床等等。这一系列的家具就叫做产品族。产品族面临的问题是,当一个产品族切换到另外一个产品族时,如何让代码的修改最小。也就是说如何做到开闭原则。想把设计好的方案从简约现代切换到欧式风格家具,怎么才能做到修改最小?如果采用简单工厂,那么每种产品都对应一个工厂,工厂负责产出不同风格的产品。设计方案中用到 n 种产品就要修改 n 处代码。这显然不是最佳的方法。此时,我们需要抽象工厂模式来解决这个问题。抽象工厂模式中,每个工厂的实现负责生产自己产品族的产品。示意图如下:
- 3. 策略模式与工厂模式结合使用 针对第一个缺点。我们可以通过策略模式与工厂模式结合使用来改进。通过进一步封装,消除客户端代码的条件选择。我们修改一下StrategyContext类,代码如下:public class StrategyContext { private TravelStrategy strategy; public StrategyContext(String travelWay) { if ("selfDriving".equals(travelWay)) { strategy = new SelfDrivingStrategy(); } if ("bicycle".equals(travelWay)) { strategy = new BicycleStrategy(); } else { strategy = new PublicTransportStrategy(); } } public int calculateMinCost(){ return strategy.calculateMinCost(); }}可以看到我们初始化的逻辑和工厂的逻辑很相似。这样条件判断就提炼到 Context 类中了。而客户端代码将会简洁很多,只需要在初始化 StrategyContext 时,传入相应的出行方式即可。代码如下:public class TravelService { private StrategyContext strategyContext; public int calculateMinCost(String travelWay){ strategyContext = new StrategyContext(travelWay); return strategyContext.calculateMinCost(); }}改进后,客户端代码现在已经完全不知道策略对象的存在了。条件判断也被消除了。其实很多时候我们都是通过搭配不同设计模式来达到我们的设计目标的。策略+工厂模式类图如下:
- 1.1 工厂模式实现电子地图 首先我们需要一个策略接口,不同策略实现该接口。再搭配一个策略工厂。客户端代码只需要根据用户的出行方式,让工厂返回具体实现即可,由具体的实现来提供算法计算。以工厂模式实现的电子地图代码如下。TravelStrategy接口代码:public interface TravelStrategy { int calculateMinCost();}TravelStrategy接口的实现代码:public class SelfDrivingStrategy implements TravelStrategy { @Override public int calculateMinCost() { return 30; }}TravelStrategyFactory代码:public class TravelStrategyFactory { public TravelStrategy createTravelStrategy(String travelWay) { if ("selfDriving".equals(travelWay)) { return new SelfDrivingStrategy(); } if ("bicycle".equals(travelWay)) { return new BicycleStrategy(); } else { return new PublicTransportStrategy(); } }}TravelService对外提供计算方法,通过工厂生成所需要的 strategy。代码如下:public class TravelService { private TravelStrategyFactory travelStrategyFactory = new TravelStrategyFactory(); public int calculateMinCost(String travelWay) { TravelStrategy travelStrategy = travelStrategyFactory.createTravelStrategy(travelWay); return travelStrategy.calculateMinCost(); }}代码结构和我们上一节讲解的音乐推荐器几乎一模一样。看似也很好地解决了我们的设计问题。接下来我们看看如何用策略模式解决这个问题,然后我们再对两种模式做对比。
- 4. 为什么要学习设计模式 前面已经给出了设计模式的定义----为解决特定的问题,一套通用的、可重用的软件设计方案。我们面对的问题不一样,需要选择不同的设计模式来解决问题。这就好比木匠有 20 种工具,分别用于做不同的事情。而设计模式就是软件设计的工具,根据你遇到的问题不同,供你选择使用。而学习设计模式的目的,就是让你熟知工具的样子,工具能够做什么事情,解决什么样的问题。当你再遇到设计问题时,自然就会想到采用什么设计模式来解决。设计模式有多厉害呢?我可以讲一个亲身经历,曾经我有一位同事写了一段代码来完成一个功能。code review时,我和他说你可以看一下设计模式,这段代码使用XX模式来实现会更为的优雅。两天后他找到我说:“设计模式太厉害了!感觉我前几年代码都白写了!” 你不要觉得夸张,他的这个感觉,也是我初学设计模式后的感觉----原来程序还可以这么写!以前我们解决问题的工具是锤子、斧子,而现在全都是机械化工具。设计模式就是这么神奇的东西。
- 4. 策略模式适用场景 当存在多种逻辑不同,但属于同一类型的行为或者算法时,可以考虑使用策略模式。以此来消除你算法代码中的条件判断。同时让你的代码满足多种设计原则。很多时候,工厂模式和策略模式都可以为你解决同类问题。但你要想清楚,你想要的是一个对象,还是仅仅想要一个计算结果。如果你需要的是一个对象,并且想用它做很多事情。那么请使用工厂模式。而你仅仅想要一个特定算法的计算结果,那么请使用策略模式。策略模式属于对象行为模式,而工厂属于创建型模式。策略模式和工厂模式对比如下:
什么是工厂模式相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议