java三种工厂设计模式

1. 简单工厂模式

简单工厂有以下三个主角:

  • Factory:工厂负责生产产品
  • AbstructProduct:抽象产品,就好比华为手机,我没说是华为那个型号手机。
  • Product:具体产品,就比如华为mate50。

我想要华为mate50手机,那华为mate50手机首先是华为手机,华为手机有什么功能就在下面接口写了。

public interface HuaweiiPhone {void call();
}

华为手机有mate50、p40、荣耀等等很多个手机,那我就要写个类来具体实现比如mate50手机了。下面就明确了华为手机有哪些了。

public class Mate50 implements HuaweiiPhone{@Overridepublic void call() {System.out.println("use mate50 call phone...");}
}
public class P40 implements HuaweiiPhone{@Overridepublic void call() {System.out.println("use p40 call phone...");}
}

知道华为手机有mate50、p40等这些手机,现在就要让工厂去把手机做出来了。下面这个工厂做了mate50和p40。

public class PhoneFactory {//创建什么手机,就是什么返回值类型public static HuaweiiPhone getiPhone(String phoneType){if("mate50".equalsIgnoreCase(phoneType)){return new Mate50();} else if ("p40".equalsIgnoreCase(phoneType)) {return new P40();}else {throw  new RuntimeException("没有这个产品...");}}
}

用户想买那个手机,就去这个店里(工厂)购买就行了。

public class Client {public static void main(String[] args) {HuaweiiPhone mate50 = PhoneFactory.getiPhone("mate50");mate50.call();}
}

以上就是简单工厂模式了。

2. 工厂方法模式

了解了简单工厂模式,我们来思考一下简单工厂模式有什么缺陷?

举个例子,有一天我要新增一个产品华为荣耀,我就必须去修改工厂(PhoneFactory)代码了,这就有点不灵活了。这种情况的解决方案就是工厂方法模式,下面详细说一下工厂方法模式。

工厂方法模式有四个主角:

  • AbstructFactory:抽象工厂,抽象工厂就用来生产具体工厂,比如华为公司。
  • Factory:具体工厂,具体工厂就是说每个型号的手机都会有一个专门的生产工厂,比如华为公司下的mate50生产线。
  • AbstructProduct:抽象产品
  • Product:具体产品

先写一个抽象工厂用于生产手机工厂,抽象工厂就好比建立一个手机公司,专门用来生产手机。

public interface AbstractFactory {HuaweiiPhone product();
}

这个手机公司下有很多生产线,比如生产mate50的,生产p40的,生产荣耀的。就是说某个型号的手机生产就是具体工厂。下面这两个分别是生产mate50和p40的工厂,这两个工厂实现抽象工厂。

public class Mate50Factory implements AbstractFactory{@Overridepublic HuaweiiPhone product() {return new Mate50() ;}
}
public class P40Factory implements AbstractFactory{@Overridepublic HuaweiiPhone product() {return new P40();}
}

然后呢mate50是什么?p40又是什么?它们是个手机,所以我们要建一个抽象手机的接口。

public interface HuaweiiPhone {void call();
}

具体的mate50、p40实现了这个手机接口,我们才知道是个手机嘛。

public class Mate50 implements HuaweiiPhone {@Overridepublic void call() {System.out.println("use mate50 call phone...");}
}
public class P40 implements HuaweiiPhone {@Overridepublic void call() {System.out.println("use p40 call phone...");}
}

最后这里是用户测试。

public class Client {public static void main(String[] args) {Mate50Factory mate50Factory = new Mate50Factory();HuaweiiPhone product = mate50Factory.product();product.call();}
}

这部分就是我们所说的工厂方法模式了。

3. 抽象工厂模式

最后这里提一下抽象工厂模式。抽象工厂模式其实就比工厂方法模式多了个业务,华为公司并不是只生产手机的吧,也有电脑啊耳机啊什么的。
抽象工厂模式解决就是新增的一个业务。

举个例子,现在华为公司卖华为电脑和华为手机,小米公司卖小米电脑和小米手机,对我们用户来说买手机就多了选择什么品牌的手机。这差不多就是抽象工厂模式的核心思想了。

剖析java三种工厂设计模式相关推荐

  1. java 三种工厂模式

    java 三种工厂模式 一.简单工厂模式 一个栗子:  我喜欢吃面条,抽象一个面条基类,(接口也可以),这是产品的抽象类. public abstract class INoodles {/*** 描 ...

  2. java 三种工厂模式(简单工厂+工厂方法+抽象工厂)

    一.简单工厂模式 概述   简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的 实例,被创建的实例通常都具有共同的父类.因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因 ...

  3. JAVA设计模式之工厂模式(三种工厂模式)

    1.工厂模式可以分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 简单工厂其实不是一个标准的的设 ...

  4. java设计模式---三种工厂模式之间的区别

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...

  5. 什么java工厂模式_java的三种工厂模式是什么?

    java的三种工厂模式:1.简单工厂模式,提供一个创建对象实例的功能,而无须关心其具体实现:2.工厂方法模式:3.抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类. 一. ...

  6. 手把手教你应用三种工厂模式在SpringIOC中创建对象实例【案例详解】

    目录 一.工厂模式介绍 二.通过静态工厂方法创建Bean实例 三.通过实例工厂方法创建Bean实例 四.通过自定义的factoryBean来创建bean对象 Hello,你好呀,我是灰小猿!一个超会写 ...

  7. Factory-pattern 三种工厂模式

    解决问题 主要解决创建复杂对象的问题. 应用场景 当某一系列对象需要复杂的逻辑控制创建过程,过程创建过程比较复杂时,可以采用工厂模式. 工厂模式常见的有三种: 简单工厂模式: 又称之为静态工厂模式 工 ...

  8. Java 10种常见设计模式UML图

    Java 10种常见设计模式UML图 简单工厂模式(不属于23种设计模式) 工厂方法模式 单例 模式(静态内部类方式 IODH) 适配器模式 装饰者模式 门面模式 代理模式(静态代理) 观察者模式 策 ...

  9. 为什么要用工厂模式以及三种工厂模式的联系

    首先声明,本篇博文是博主自己对工厂模式的理解,本篇博文旨在通过生活来讲述,代码量会相对较少(其实没有),尽量通过生活现象去讲述缘由,这样会比较通俗易懂,如果能对大家有启发作用的话,博主深感荣幸. 首先 ...

最新文章

  1. 关卡 动画 蓝图 运行_上车喂,建模大神带你学UE4在编辑器启动时是如何运行蓝图的...
  2. 5. Binary Tree Postorder Traversal
  3. Applese 的大奖
  4. 析构函数为什么写成虚函数?
  5. jupyter notebook报错Failed to load module appmenu-gtk-module
  6. 在python中查看关键字、需要执行_python关键字以及含义,用法
  7. NOIP2011 铺地毯
  8. mysql二分法查找亿行_算法——二分法查找(binarySearch)
  9. 重磅:服务器基础知识全解终极版(145页PPT)
  10. java---键盘输入,写入到本地硬盘的数据
  11. 博图注册表删除方法_安装西门子软件反复提示重启电脑的解决方法
  12. 为你的企业建立竞争情报系统
  13. Prometheus+SpringBoot应用监控全过程详解
  14. R数据分析:纵向数据如何做中介,交叉滞后中介模型介绍
  15. linux超级无敌指令进阶
  16. 杭州/北京内推 | 阿里达摩院生物医学信息处理团队招聘24届春招实习生
  17. 实现MASW分析以及速度反演的工具包——MASWaves
  18. C语言宿舍管理查询软件
  19. Openvas的安装调试
  20. 原生微信小程序学习第一部分

热门文章

  1. C51---蓝牙模块---连接软件---控制LED灯
  2. mongodb distinct条件查询
  3. MineJavaDiary1
  4. Jquery实现下拉菜单滑动效果
  5. 弘辽科技:80后女大学生开网店创业 年销售额达100万元
  6. 【品高云7年】一、云计算10年从概念与技术到业务与场景
  7. 如何从上位机或者触摸屏设定Time或S5Time值?
  8. 每日一支TED——帕特里夏#183;瑞安:不要固执于英语
  9. python输入五个数并求平均值奇数和、偶数和_输入八个数,求偶数和奇数的个数,并求偶数的平均值,奇数的平均值(c语言编程)...
  10. winform-弹窗界面使用DIALOGRESULT判断结果并返回内容,而不使用回调方法,解决主窗体获取不到焦点问题