java工厂设计模式详解_java和python的区别

java工厂设计模式详解_java和python的区别,第1张

java工厂设计模式详解_java和python的区别 前言今天来和小伙伴们分享下设计模式中的工厂模式啦一、工厂模式我们都知道,设计模式有23种,按照功能和使用场景可以分为三大类:创建型模式结构型模式行为型模式工厂设计模式(Factory Pattern)呢,就是一种很常见的设计模式,属于创建型模式的,主要作用就是来创建对象的~原理图先来看一个小栗子二、简单工厂模式(非23种)原理图​例子的话,感觉也挺多的 比如各种品牌的电脑呀,手机呀,家具呀……比如笔记本电脑的例子抽取公共接口这里就只提供一个返回品牌的接口public interface 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 main(String[] args) { ILaptop hw = LaptopFactory.createLaptop("HuaWei"); String brand = hw.brand(); System.out.println(brand); }}1.2.3.4.5.6.7.当然,这个是最简单的工厂模式例子了,也叫做 简单工厂模式当然这个也有很明显的弊端,所以我们再来看看这个 工厂方法模式三、工厂方法模式原理图​想想简单工厂的写法,将创建对象的所有 *** 作都封装在一个工厂里,是不合理的,所以我们要进一步解耦抽取工厂公共接口public interface 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 mac = 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.五、小结在使用工厂模式时,我们可以发现从 简单工厂(非23种) ——》 工厂方法 ——》抽象工厂这是一个不断扩展,解耦的过程,我们可以在项目种根据需要进行选择~比如 产品多的话就选抽象工厂,单一的话就直接用工厂或者简单工厂就可以了至此,我们了解到工厂模式是属于23中设计模式中的创建型模式,主要用途就是创建对象,同时方便程序解耦。

接着,我们再来想想 Spring 中和工厂模式有关的说到这里,你想到什么了呢?不知道的话,就默念 Factory,Factory,Factory,哈哈哈~是不是脑海中一下子浮现出来了这两货BeanFactoryFactoryBean从名字就可以看出这两货和工厂有关 (分别通过 getBean 和 getObject 获取对象)那么我们先来介绍下他们叭六、BeanFactory源码的第一句话The root interface for accessing a Spring bean container. (IOC的根接口)可以发现它是非常核心的组件。

遵循严格的生命周期​可以发现,通过 BeanFactory 创建一个 Bean 要经过非常严格的流程处理,很繁琐。

方法​方法有很多,比如 获取别名呀,类型呀,是否是单例,原型等通过 getBean 去获取对象主要作用根据 BeanDefinition 生成相应的 Bean 对象。

​七、FactoryBean源码可以发现就这么三个方法,一个小工厂​通过 getObject 方法来返回一个对象获取对象时:如果 beanName 没有加 & 号,则获取的是泛型T 的对象。

如果添加了 & 号,获取的是实现了 FactoryBean 接口本身的对象,如 EhCacheFactoryBean而正因为它的小巧,它也被广泛的应用在Spring内部,以及Spring与第三方框架或组件的整合过程中。

八、BeanFactory 和 FactoryBean 的区别是什么?BeanFactory 是一个大工厂,是IOC容器的根基,有繁琐的 bean 生命周期处理过程,可以生成出各种各样的 BeanFactoryBean 是一个小工厂,它自己也是一个 Bean ,但是可以生成其他 Bean​最后一个问题九、Spring中工厂模式的使用既然都和工厂有关,那么我们就挑个软柿子捏一下FactoryBean工厂模式图​可以发现和我们上面介绍的工厂方法模式一样,公共接口和不同的实现类,通过具体的工厂获取对象。

BeanFactory 也是类似的,就不画啦十、总结画个图总结下啦最后Spring相关资料:Spring笔记-176页的知识核心整理另外还整理成了40多套PDF文档:全套的Java面试宝典手册,“性能调优+微服务架构+并发编程+开源框架+分布式”等七大面试专栏,包含Tomcat、JVM、MySQL、SpringCloud、SpringBoot、Dubbo、并发、Spring、SpringMVC、MyBatis、Zookeeper、Ngnix、Kafka、MQ、Redis、MongoDB、memcached等等。

如果你对这个感兴趣,小编可以免费分享。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/671072.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存