编辑整理:整理来源:油管,浏览量:77,时间:2022-08-10 11:42:01
boot模式,boot模式怎么进入,boot模式是什么意思
相同点:BOT 和 BOO 模式最重要的相同之处在于它们都是利用私人投资承担公共基础设施项目。在这两种融资模式中,私人投资者根据东道国政府或政府机构授予的特许协议 (concession contract) 或许可证 (license),以自己的名义从事授权项目的设计、融资、建设及经营。在特许期,项目公司拥有项目的占有权、收益权以及为特许项目进行投融资、工程设计、施工建设、设备采购、运营管理和合理收费等的权利,并承担对项目设施进行维修、保养的义务。在我国,为保证特许权项目的顺利实施,在特许期内,如因我国政府政策调整因素影响,使项目公司受到重大损失的,允许项目公司合理提高经营收费或延长项目公司特许期;对于项目公司偿还贷款本金、利息或红利所需要的外汇,国家保证兑换和外汇出境。但是,项目公司也要承担投融资以及建设、采购设备、维护等方面的风险,政府不提供固定投资回报率的保证,国内金融机构和非金融机构也不为其融资提供担保。
不同点:BOT 与 BOO 模式最大的不同之处在于:在 BOT 项目中,项目公司在特许期结束后必须将项目设施交还给政府,而在 BOO 项目中,项目公司有权不受任何时间限制地拥有并经营项目设施。从 BOT 的字面含义,也可以推断出基础设施国家独有的含义:作为私人投资者在经济利益驱动下,本着高风险,高回报的原则,投资于基础设施的开发建设。为收回投资并获得投资回报,私人投资者被授权在项目建成后的一定期限内对项目享有经营权,并获得经营收入。期限届满后,将项目设施经营权无偿移交给项目东道国政府。由此可见,项目设施最终经营权仍然掌握在国家手中,而且在 BOT 项目整个运作过程中,私人投资者自始至终都没有对项目的所有权。说到底,BOT 模式不过是政府利用私人投资者在一定期限内对项目设施拥有经营权,但该基础设施的本质属性没有任何改变。换句话说,运用 BOT 方式,项目发起者可拥有一段确定的时间以获得实际的收入来弥补其投资,之后,项目交还给政府。而 BOO 方式,项目的所有权不再交还给政府。
今天来和小伙伴们分享下设计模式中的工厂模式啦
我们都知道,设计模式有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等等。如果你对这个感兴趣,小编可以免费分享。
资料获取方式:关注小编+转发文章+私信【面试题】获取上述资料~
重要的事情说三遍,转发+转发+转发,一定要记得转发哦!!!
UEFI和Legacy的区别是什么