序
今天就和朋友们分享一下设计模式中的工厂模式。
首先,工厂模式
众所周知,设计模式有23种,根据功能和使用场景可以分为三类:
创建型模式结构型模式行为型模式
工厂模式是一种很常见的设计模式,属于创意模式,主要功能是创建对象~
示意图
我们先来看一个小栗子。
二。工厂方法模式(非23种)
示意图
比如有很多感觉,比如各种品牌的电脑,定位器,家具...
例如膝上型计算机。
提取公共接口
只有一个界面返回品牌。
public inte***ce ILaptop { String brand();}1.2.3.
接口类
这里只是两个例子~
public class HuaWeiLaptop implements ILaptop{ @Override public String brand() { return "HuaWei"; }}?public class MacLaptop implements ILaptop { @Override public String brand() { return "Mac"; }}1.2.3.4.5.6.7.8.9.10.11.12.13.
工厂级
最重要的是这个工厂类。我们将赋予它创建对象的能力~
public class LaptopFactory {? public static ILaptop createLaptop(String brand){ switch (brand){ case "HuaWei": return new HuaWeiLaptop(); case "Mac": return new MacLaptop(); default: return null; } }}1.2.3.4.5.6.7.8.9.10.11.12.13.
试验
就这样,我们简单的完成了一个工厂模式的应用~。创建对象后,我们可以直接调用工厂方法
public class LaptopMain { public static void ***in(String[] args) { ILaptop hw = LaptopFactory.createLaptop("HuaWei"); String brand = hw.brand(); System.out.println(brand); }}1.2.3.4.5.6.7.
当然,这是工厂模式最简单的例子,也称为工厂方法模式
当然,这个有明显的缺点,所以我们来看看这个工厂方法模式
三、工厂法模式
示意图
想想简单的工厂编写,把创建对象的所有操作都封装在一个工厂里是不合理的,要进一步解耦。
工厂公共接口的提取
public inte***ce ILaptopFactory { ILaptop createLaptop();}1.2.3.
工厂实现类
public class HuaweiLaptopFactory implements ILaptopFactory{ @Override public ILaptop createLaptop() { return new HuaWeiLaptop(); }}1.2.3.4.5.6.
试验
只需更改上面测试用例的前两句话。
HuaweiLaptopFactory huaweiLaptopFactory = new HuaweiLaptopFactory(); ILaptop ***c = huaweiLaptopFactory.createLaptop();1.2.
完成这个工厂模型是不是很简单?
四。抽象工厂
示意图
嗯,工厂肯定不止一条生产线,肯定还有其他业务,比如定位器等电器。
所以我们重复上面的笔记本产品的例子,构建一些其他的类,然后通过工厂类来创建。
抽象工厂
首先定义一个抽象工厂。
public abstract class AbstractFactory { public abstract IPhone createPhone(); public abstract ILaptop createLaptop();}1.2.3.4.
工厂实现类
只有一个了~
public class HuaweiFactory extends AbstractFactory{ @Override public IPhone createPhone() { return new HuaWeiPhone(); }? @Override public ILaptop createLaptop() { return new HuaWeiLaptop(); }}1.2.3.4.5.6.7.8.9.10.11.
动词 (verb的缩写)摘要
在使用工厂模式时,我们可以从简单工厂(不是23种)——“工厂方法中找到抽象工厂
这是一个不断
扩展和解耦
的过程,我们可以在项目类别中根据需要进行选择~
比如产品多,选择抽象工厂;如果有单品,就用工厂或者简单的工厂。
到目前为止,我们知道工厂模式属于23种设计模式中的
创意模式
,其主要目的是
创建对象
,方便程序解耦。
接下来,我们来思考一下Spring和
工厂模式
的关系
说到这里,你想到了什么?
不知道就说工厂工厂工厂哈哈哈~
你脑子里是不是突然看到这两个货了?
BeanFactoryFactoryBean
从名字可以看出这两个商品和工厂有关系(分别通过getBean和getObject获取对象)
那我们先介绍一下。
不及物动词豆制品厂
源代码的第一句话
用于访问spring bean容器的根接口。(IOC的根接口)
可以发现它是
的一个非常核心的组件。
遵循严格的生命周期
可以发现,通过BeanFactory创建一个Bean要经历一个非常严格的过程,这个过程是繁琐的。
方法
方法有很多,比如获取别名、类型、单件、原型等。
通过getBean获取对象。
主要功能
根据BeanDefinition生成相应的Bean对象。
七。接口
源代码
可以发现,只有三条路,小厂
通过getObject方法返回一个对象。
获取对象时:
如果 beanName 没有加 & 号,则获取的是
泛型T
的对象。如果添加了 & 号,获取的是实现了 FactoryBean 接口本身的对象,如 EhCacheFactoryBean
因为体积小,所以在
Spring
中,以及在
Spring与第三方框架或组件
集成的过程中也被广泛使用。
八。BeanFactory和FactoryBean有什么区别?
BeanFactory 是一个大工厂,是IOC容器的根基,有繁琐的 bean 生命周期处理过程,可以生成出各种各样的 BeanFactoryBean 是一个小工厂,它自己也是一个 Bean ,但是可以生成其他 Bean?
最后一个问题
九、春季工厂模式的使用
既然都和工厂有关,那就挑个软柿子捏吧。
工厂Bean工厂模式图
可以发现,和我们上面介绍的工厂方法模式一样,公共接口和不同的实现类都可以通过特定的工厂获取对象。
BeanFactory也差不多,就不画了。
X.摘要
画张图总结一下
最后
Spring相关信息:
春季笔记-176页知识核心整理[/S2/]
另外还整理了40多个Redis的PDF文档:全套Java访谈书,7个访谈栏目“性能调优+微服务架构+并发编程+开源框架+分布式”,包括Tomcat、JVM、MySQL、SpringCloud、SpringBoot、Dubbo、Concurrent、Spring、SpringMVC、MyBatis、Zookeeper、Ngnix、Kafka等。如果你对此感兴趣,边肖可以免费分享。
本文来自离开我后记得微笑投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/600899.html