网站首页 / 育儿 / 正文

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

时间:2022-04-14 09:36:46 浏览:3338次 作者:用户投稿 【我要投诉/侵权/举报 删除信息】

多条告白如次剧本只需引入一次

媒介

即日来和小搭档们瓜分下安排形式中的工场形式啦

一、工场形式

咱们都领会,安排形式有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之类。即使你对这个感爱好,小编不妨免费瓜分。

版权声明:
本文内容由互联网用户自发贡献,该文观点仅代表作者本人,因此内容不代表本站观点、本站不对文章中的任何观点负责,内容版权归原作者所有、内容只用于提供信息阅读,无任何商业用途。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(文章、内容、图片、音频、视频)有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至353049283@qq.com举报,一经查实,本站将立刻删除、维护您的正当权益。