java中工厂设计模式-金沙1005

java中工厂设计模式_java工厂模式详解1.什么是工厂模式?工厂模式的主要解决的问题是,将原来分布在各个地方的对象创建过程单独抽离出来,交给工厂类负责创建。其他地方想要使用对象直接找工厂(即调用工厂的方法)获取对象。2.作用:实现类创建者和调用者的分离3.核心本质: 实例化对象不使用new,用工厂方法代替 将选择实现类,创建对象统一管理和控制。从而将调用者和我们的实现类解耦 4.详细分类:1.简单工厂模式/静态工厂模式 用来生产同一等级结构中的任意产品 2.工厂方法模式 用来生产同一等..

目录

1.什么是工厂模式?

2.作用:

3.核心本质:

4.详细分类:

5.简单工厂模式/静态工厂模式:

6.工厂方法模式

7.两种模式对比总结:


工厂模式的主要解决的问题是,将原来分布在各个地方的对象创建过程单独抽离出来,交给工厂类负责创建。其他地方想要使用对象直接找工厂(即调用工厂的方法)获取对象。

实现类创建者和调用者的分离

1).工厂模式是为了解耦:把对象的创建和使用的过程分开

2).工厂模式可以降低代码重复

3)因为工厂管理了对象的创建逻辑,使用者并不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误

  • 实例化对象不使用new,用工厂方法代替

  • 将选择实现类,创建对象统一管理和控制。从而将调用者和我们的实现类解耦   

1.简单工厂模式/静态工厂模式

  • 用来生产同一等级结构中的任意产品

2.工厂方法模式

  • 用来生产同一等级结构中的固定产品

3.抽象工厂模式

  • 围绕一个超级工厂创建其他工厂。该超级工行又称为其他工厂的工厂

弊端:如果你不修改代码(工厂类),无法增加新的产品

代码实例(实现一个买汽车的过程)

1)构建一个汽车接口

package gongchang.simple;
public interface car {
   void name();
}
java中工厂设计模式_java工厂模式详解

为防止网络爬虫,请关注公众号回复”口令”

激活idea 激活clion
datagrip dataspell
dotcover dotmemory
dottrace goland
phpstorm pycharm
resharper reshac
rider rubymine
webstorm 全家桶

2)分别两种汽车型号类继承这个接口

特斯拉

public class tesla implements car {
    @override
    public void name() {
        system.out.println("我是特斯拉");
    }
}

五菱

public class wuling implements car{
    @override
    public void name() {
        system.out.println("我是五菱宏光");
    }
}

 3)构建工厂类

public class carfactor {
    public static car getcar(string car){
        if (car.equals("五菱")){
            return new wuling();
        }else if(car.equals("特斯拉")){
            return new tesla();
        }else {
            return null;
        }
    }
}

 4)创建消费者类,使用工厂创建这个对象,从而避免了手动new对象

通俗来讲就是我去买汽车去工厂买了已经造好的汽车,而不是自己手动去new一辆汽车

public class consumer {
    public static void main(string[] args) {
        //使用工厂创建
        car car = carfactor.getcar("特斯拉");
        car.name();
    }
}

java中工厂设计模式_java工厂模式详解 

 5)优化:修改工厂类的结构

略微增加了可扩展性

public class carfactor {
    public static car getwuling(){
       return new wuling();
    }
    public static car gettesla(){
        return new tesla();
    }
}

创建新产品时进行横向扩展,创建新的工厂类,不需要修改原有代码

1)创建汽车接口,车型类,消费者类这三步与简单工厂模式相同

2)创建汽车工厂接口

java中工厂设计模式_java工厂模式详解

 3)当添加每种型号汽车时,分别调用上面的接口创建自己的工厂类

public class teslafactory implements carfactory {
    @override
    public car getcar() {
        return new tesla();
    }
}
public class wulingfactory implements carfactory {
    @override
    public car getcar() {
        return new wuling();
    }
}

简单工厂模式:

  • 结构复杂度较优

  • 代码复杂度较优

  • 编程复杂度较优

  • 管理复杂度较优

根据设计原则应选择:工厂方法模式

根据实际业务应选择:简单工厂模式

js555888金沙老品牌的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/141849.html

(0)

相关推荐

  • java高级工程师面试题_java高级工程师面试题及答案解析「建议收藏」面试永远是程序员迈向成功的第一个门槛,想要面试成功,各种面试题的洗礼是必不可少的,下面就来看看小编精心整理的一些java高级工程师面试题及答案吧。一、堆的年轻代和老年代怎么理解?堆的年轻代大则老年代小,gc少,但是每次时间会比较长。年轻代小则老年代大,会缩短每次gc的时间,但是次数频繁。可以让老年代尽量缓存常用对象,jvm默认年轻代和老年代的大小比例为1:2,。观察峰值老年代内存,不影响fullg…

    2022年12月22日
  • java环境变量配置有什么用_java环境变量大一时装jdk时对着网上的摆弄了好久,然后自己出了个图文教程在同学间流传甚广,最近同学帮大一的问我怎么装,此处将当时的教程完整的复制过来。希望能解决你们的问题。应用java程序之前必须设置系统变量,就像每个生物都得有适合自己生存的环境一样,只有设置成功了才能成功运行jav软件建议按照系统默认路径安装到c盘,如果你是高手就算了。系统变量设置步骤:(以下图片教…

  • java执行shell命令并返回结果_启动shell脚本命令 java-执行shell命令 1、本地调用 1 import ch.ethz.ssh2.connection; 2 import ch.ethz.ssh2.session; 3 import lombok.extern.slf4j.slf4j; 4 import org.springframewor …

  • java 数组创建方式_java数组能直接声明大小吗java创建数组有三种方式1.第一种方式intarr[]=newint[5];属于动态创建,声明并创建内存空间,等待赋值。//创建数组的第一种方式 //属于动态创建,声明并创建内存空间,等待赋值。intarr[]=newint[5];intvalue=arr[0];//int没有赋值,默认为0system.out.println(“value=” value);arr[1]=1;intvalue1=arr[1];system.out

  • java面试葵花宝典电子版_java开发面试java葵花宝典一、java基础1、**final关键字的作用?被final修饰的类不可以被继承被final修饰的方法不可以被重写被final修饰的变量不可以被改变被final修饰的方法,jvm会尝试将其内联,以提高运行效率被final修饰的常量,在编译阶段会存入常量池中如果修饰引用,那么表示引用不可变,引用指向的内容可变2、**abstractclass和interface有什么区别?声明方法的存在而不去实现它的类被叫做抽象类(abstractcla

    2022年12月27日
  • java毕业设计干洗店订单管理系统设计与实现计算机源码 lw文档 系统 调试部署 数据库java毕业设计干洗店订单管理系统设计与实现计算机源码 lw文档 系统 调试部署 数据库。前端技术layui、html、css、js、jquery等技术。springcloud基于微服务架构的乐居租房网的设计与实现。springboot书海中学图书管理系统。springboot新生入学报到管理系统。springboot实验室办公管理系统。springboot我爱短视频管理系统。…

  • javascript中的变量在内存中的具体存储形式_变量值要带单位吗
    1 在javascript中的变量分别区分为两种: 一种为基本类型值,一种为应用类型值。 基本类型值指的是简单的数据段 引用类型值为可能由多个值组成的对象 引用类型的值是保存在内存中的对象,javascript不允许直接操作对象的内存空间,实际上操作对象的引用而不是实际对象。 var dada = …

  • java graphics2d 透明_java graphics2d绘制背景透明的图形过程packagecom.jhy.time;importjava.awt.alphacomposite;importjava.awt.basicstroke;importjava.awt.color;importjava.awt.graphics2d;importjava.awt.transparency;importjava.awt.image.bufferedimage;import…

发表回复

您的电子邮箱地址不会被公开。

联系金沙1005

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图