• 设计模式之工厂模式


    为什莫要学工厂模式:

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

  • 相关阅读:
    winfrom让窗体在屏幕右下角慢慢向上弹出
    winfrom的StatusStrip控件如何设置控件右对齐
    Winfrom通过Panel拖动无边框窗体
    优秀学习资源汇总
    hexo+github搭建博客跳坑
    博客园主题样式修改
    wxss无法调用本地资源图片
    微信小程序wx:for循环
    Git常用命令总结
    git push解决办法: ! [remote rejected] master -> master (pre-receive hook declined)
  • 原文地址:https://www.cnblogs.com/nanfengnan/p/14142999.html
Copyright © 2020-2023  润新知