设计模式之工厂模式

为什莫要学工厂模式:

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();}

 

上一篇:创建用户和组


下一篇:MongoDB 常用操作