为什莫要学工厂模式:
1.降低后台类之间的耦合度
2.为了在项目修改时,更容易 只需要修改工厂即可
3.为spring框架打基础,因为spring框架就是基于工厂模式设计的 思想是一样的
引出工厂模式的流程:
简单演示工厂模式的诞生和优点
1.创建6个类在java-web项目中 BYD比亚迪车类 Kdlk凯迪拉克车类 Zhangsan人的类 Car汽车类的接口 CarFactory所有汽车的停车场 RunTime是运行测试类
2.先使用三个类 BYD,Zhangsan,RunTime类
现阶段拥有的资源:
1.Zhangsan有两个方法,goWork(工作)和goHome(回家)
2.BYD车 有三个方法 run() 车启动 speed()车加速 stop()车停止
3.RunTime里面只有一个mian方法用来运行测试
现阶段需求:
1.Zhangsan想要开BYD汽车回家和上班
2.(未考虑各种设计模式时)
正常实现 应该是在Zhangsan的goWork()和goHome()方法里面分别创建一个BYD对象,再用BYD对象调用BYD车的方法,来完成goWork和goHome的操作
代码截图如下:
Zhangsan.java
BYD.java
RunTime.java
运行结果:
2_1.有了新需求 改进
需求:因为每次都要建立对象,如果明显耦合度较高,并且百万级别访问时,服务器cpu负载压力过大,
所以需要改进
1.改进:考虑在Zhangsan的每个方法里都创建对象,还不如把对象创建在Zhangsan类的属性里面,这样BYD对象为Zhangsan内部类所共有了,可以减少一次创建
所以只需要修改Zhangsan类即可
结果截图:
3.需求有了大变化 这时加入Kdlk类代码截图见下面
需求:现在我们想开别的车回家,如Kdlk,开BYD车上班
思路:首先,我们一定会想到再建一个类,实现Kdlk的类方法 run(),speed(),stop()
然后在Zhangsan里面创建一个Zhangsan类的属性对象,再在Zhangsan的goHome方法里面引用对象
4.接着思考,
这样写完,代码还是没什莫用出,因为我车多了,你就还得修改代码,创建很多对象,
这时我们尝试使用多态思想 :为所有汽车设置一个接口,定义一些汽车的共有属性,然后让具体的汽车类实现汽车接口,这样
当我们有很多汽车时,Zhangsan决定要开哪辆车,我们就只需要创建一个对象(把具体对象赋值给接口对象 多态)这样少创建了很多对象
建立汽车接口为Car,代码如下:
Zhangsan类代码修改为:这个代码当汽车类多时就体现了优越性
结果如下:
工厂模式的核心思想 也是spring容器的核心思想 把所有对象放到一个地方,等待调用,这样既减少了,前面调用者和后面实现类之间的关联,有减少了百万人访问时创建的对象的个数,大大大大减少了cpu负载(为每个类只创建一个对象 同时 等待调用)
5.还要考虑,这样实现接口虽然减少了对象的创建,但是 new 相当于 创造,所以现在的意思是我用哪辆车就现创造哪辆车,车和人的类之间还有关联
而且也不符合逻辑
所以我们创造一个停车场 CarFactory 把拥有的车都放在里面,这样当我们添加车时,只需要创建车类实现车类公有接口,再在把创建好的车类对象放入CarFactory停车场里面 等待人们取车使用即可---》 这才是工厂的核心目的。
CarFactory代码:
Zhangsan.java代码
结果截图:
package com.facotry;//停车场public class CarFactory {public static BYD byd = new BYD();public static Kdlk kdlk = new Kdlk();}