前言

工厂模式的核心本质就是减少了我们去new对象这样子的操作,工厂模式可以分为三种,简单工厂模式工厂方法模式抽象工厂模式

  • 简单工厂模式

简单工厂模式本质上是违背开闭原则的,简单工厂模式把实例化的操作放到统一一个类里面,让这个类去决定创建哪种对象

  • 工厂方法模式

工厂方法模式我觉得就是在简单工厂模式上加了一层,这样就能保证开闭原则了

  • 抽象工厂模式

抽象工厂模式其实就是工厂的工厂,也就是一个超级工厂,他提供了一个抽象的工厂接口,他是所有工厂一般化的一种形态

传统模式

假如我们有一个饼干类,顾客想要买饼干,但是饼干有很多种,比如巧克力饼干,夹心饼干,压缩饼干等等

代码实现

//客户类
public class client {public static void main(String[] args) {//买一个巧克力饼干Cookie cookie = new ChocolateCookies();cookie.eatCookie();//买一个夹心饼干cookie = new CompressedCookie();cookie.eatCookie();//买一个压缩饼干cookie = new SandwichCookie();cookie.eatCookie();}
}
//公共饼干接口
public interface Cookie {public void name();public void eatCookie();}//夹心饼干实现
public class SandwichCookie implements Cookie{@Overridepublic void name() {System.out.println("夹心饼干");}@Overridepublic void eatCookie() {System.out.println("吃掉夹心曲奇");}}//压缩饼干实现
public class CompressedCookie implements Cookie{@Overridepublic void name() {System.out.println("压缩饼干");        }@Overridepublic void eatCookie() {System.out.println("吃掉压缩饼干");        }}
//巧克力饼干实现
public class ChocolateCookies implements Cookie{@Overridepublic void name() {System.out.println("巧克力饼干");        }@Overridepublic void eatCookie() {System.out.println("吃掉巧克力饼干");        }
}
//吃掉巧克力饼干
//吃掉压缩饼干
//吃掉夹心曲奇
复制代码

简单工厂模式

我们可以看到在我们的Client类里面,我们多次使用了new,去生成不同的饼干,我们可以使用简单工厂模式去优化我们的代码,其实就是我们有一个饼干工厂,我们每次去买饼干都是从工厂中拿的。

为什么说简单工厂模式不符合开闭原则呢?

在简单工厂模式中,就比如上图,我还要加一个草莓饼干,这个时候,我们需要修改饼干工厂的代码,所以不符合开闭原则。

代码实现

这里只把饼干工厂类的代码放在这里,饼干的实现类并没有改变

//客户类
public class client {public static void main(String[] args) {Cookie cookie = CookieFactory.getCookie("巧克力");cookie.eatCookie();cookie = CookieFactory.getCookie("夹心");cookie.eatCookie();cookie = CookieFactory.getCookie("压缩");cookie.eatCookie();}
}
//饼干工厂类
public class CookieFactory {public static Cookie getCookie(String cookieName){if("巧克力".equals(cookieName)){return new ChocolateCookies();}else if("夹心".equals(cookieName)){return new SandwichCookie();}else if("压缩".equals(cookieName)){return new CompressedCookie();}else{return null;}}
}
//吃掉巧克力饼干
//吃掉夹心曲奇
//吃掉压缩饼干
复制代码

工厂方法模式

其实我觉得工厂方法模式就是在简单工厂模式加了一层,这样就符合了开闭原则

代码实现

我们可以看到工厂方法模式的代码十分冗余,虽然他符合了开闭原则,但是我们在日常开发中很少使用它。

//客户类
public class client {public static void main(String[] args) {Cookie cookie = new ChocolateFacotry().getCookie();cookie.eatCookie();cookie = new SandwichFactory().getCookie();cookie.eatCookie();cookie = new CompressedFactory().getCookie();cookie.eatCookie();}
}
//饼干工厂
public interface FacotryMehtod {Cookie getCookie();
}
//夹心饼干工厂
public class SandwichFactory implements FacotryMehtod{@Overridepublic Cookie getCookie() {return new SandwichCookie();}}
//压缩饼干工厂
public class CompressedFactory implements FacotryMehtod{@Overridepublic Cookie getCookie() {return new CompressedCookie();}}
//巧克力饼干工厂
public class ChocolateFacotry implements FacotryMehtod{@Overridepublic Cookie getCookie() {return new ChocolateCookies();}}
复制代码

抽象工厂模式

对于抽象工厂模式,是一种一般化工厂的一种形态,就比如,联想的工厂肯定不仅仅只生产电脑,小米的工厂也不仅仅只生产电脑,他肯定还有其他的,其实我觉得抽象工厂模式更像是一种产品族的概念

就像这种,我们的抽象工厂只提供一些基本工厂的一些形态

代码实现

//客户类
public class client {public static void main(String[] args) {PhoneProduct phone = new XiaomiFactory().getPhoneProduct();//从小米工厂买手机phone.SendSMS();phone.callUp();PhoneProduct phone2 = new LianXiangFactory().getPhoneProduct();//从联想工厂买手机phone2.SendSMS();phone2.callUp();ComputerProduct computer = new XiaomiFactory().getComputerProduct();//从小米工厂买电脑computer.work();computer.game();ComputerProduct computer2 = new LianXiangFactory().getComputerProduct();//从联想工厂买电脑computer2.work();computer2.game();}
}
//统一工厂
public interface abstractFactory {PhoneProduct getPhoneProduct();ComputerProduct getComputerProduct();
}
//联想工厂
public class LianXiangFactory implements abstractFactory{@Overridepublic PhoneProduct getPhoneProduct() {return new LianXiangPhone();}@Overridepublic ComputerProduct getComputerProduct() {return new LianXiangComputer();}}
//小米工厂
public class XiaomiFactory implements abstractFactory{@Overridepublic PhoneProduct getPhoneProduct() {return new XiaomiPhone();}@Overridepublic ComputerProduct getComputerProduct() {return new XiaomiComputer();}}
//统一电脑接口
public interface ComputerProduct {void work();void game();
}
//统一手机接口
public interface PhoneProduct {void callUp();void SendSMS();
}
//联想电脑
public class LianXiangComputer implements ComputerProduct{@Overridepublic void work() {System.out.println("使用联想电脑办公");        }@Overridepublic void game() {System.out.println("使用联想电脑玩游戏");        }}
//联想手机
public class LianXiangPhone implements PhoneProduct{@Overridepublic void callUp() {System.out.println("使用联想手机打电话");}@Overridepublic void SendSMS() {System.out.println("使用联想手机发短信");}}
//小米电脑
public class XiaomiComputer implements ComputerProduct{@Overridepublic void work() {System.out.println("使用小米电脑办公");        }@Overridepublic void game() {System.out.println("使用小米电脑玩游戏");        }}
//小米手机
public class XiaomiPhone implements PhoneProduct{@Overridepublic void callUp() {System.out.println("使用小米手机打电话");}@Overridepublic void SendSMS() {System.out.println("使用小米手机发短信");}}
//使用小米手机发短信
//使用小米手机打电话
//使用联想手机发短信
//使用联想手机打电话
//使用小米电脑办公
//使用小米电脑玩游戏
//使用联想电脑办公
//使用联想电脑玩游戏
复制代码

总结

对于工厂模式,我们了解了三种工厂模式的实现,以及与传统模式的不同,我们可以看到的是,除了简单工厂模式,另外两种工厂模式代码十分的冗余,所以在实际的开发中,我们也是很少使用的,虽然简单工厂模式他并不满足开闭原则,但是他实现起来更方便呀,相较于传统模式,我们也不用去new一个又一个对象了,所以简单工厂模式在实际的开发用的是比较多的!

二十三种设计模式之工厂模式(含Java工厂模式的实现)相关推荐

  1. 第二部分:二十三种设计模式解读——什么是工厂方法模式

    二十三种设计模式解读--什么是工厂方法模式 author:陈镇坤27 日期:2022年2月10日 修改日期:2022年6月23日 文章目录 二十三种设计模式解读--什么是工厂方法模式 一.工厂方法模式 ...

  2. 二十三种设计模式(第十二种)-----代理模式(Proxy)

    二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...

  3. 二十三种设计模式之原型模式

    今天继续探讨GOF二十三种设计模式的原型模式,原型模式也是属于创建型模式的一种 原型模式通俗的讲就是对象复制的过程,即通过一个原型对象,我可以得到一个该对象的克隆. 下面来看下原型模式的第一种写法-- ...

  4. Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式

    Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...

  5. 二十三种设计模式-六大原则

    二十三种设计模式 一.创建型: 单例模式.工厂模式.抽象工厂模式.原型模式.建造者模式: 二.结构型: 代理模式,装饰器模式.适配器模式.外观模式.组合模式.享元模式.桥梁模式: 三.行为型: 策略模 ...

  6. 深入理解常见的二十三种设计模式

    深入理解常见的二十三种设计模式 文章目录 深入理解常见的二十三种设计模式 一.设计模式的分类 1.1 创建型(五种) 1.2 结构型(七种) 1.3 行为型(十一种) 二.创建型 2.1 单例模式 2 ...

  7. Java二十三种设计模式 之代理(proxy)

    Java二十三种设计模式 之代理(proxy) 今天我们学习一下静态代理和动态代理 我们来看代码(写一个坦克运行了多少时间): 第一种方法: public calss Tank implements ...

  8. 二十三种设计模式第二篇--工厂模式

    上篇我们了解了6条设计模式的准则,我相信如果你想了解设计模式,那么你迈出的第一步,我会将上一篇文档里边的6大准则进行一篇有关的代码展示,当然这是题外话了,本篇我们将重点围绕工厂模式进行讲解,天哪,23 ...

  9. Java的二十三种设计模式(单例模式、工厂方法模式、抽象工厂模式)

    从这一块开始,我们详细介绍Java中23种设计模式的概念,应用场景等情况,并结合他们的特点及设计模式的原则进行分析. 创建型模式(5种):用于描述"怎样创建对象",它的主要特点是& ...

  10. java二十三种设计模式——工厂设计模式

    java设计模式的分类 在java中,设计模式有三十三种之多,分为三大类: 创建性模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构性模式,共七种:适配器模式.装饰器模式 ...

最新文章

  1. 慎用Outline ,UGUI Outline实现原理分析
  2. CentOS系统更换软件安装源yum
  3. 集合数百个常用工具类集合,V2.3.10.104
  4. 全国计算机一级考试介绍难不难,全国计算机一级考试内容 计算机一级考试难吗...
  5. 081、Weave Scope 多主机监控(2019-04-29 周一)
  6. Java Servlet教程– ULTIMATE指南(PDF下载)
  7. 神奇的datetime和datetime,一毫秒引发的血案
  8. Android的Wifi系统框架分析第一篇
  9. C语言解释器的实现--让脚本跑起来(六)
  10. HTML——超链接、音视频
  11. 区块链+电子档案解决方案
  12. 一. Scala安装与环境配置
  13. 安卓手机屏幕在电脑上实时同步显示
  14. Shell脚本初学习
  15. 高盛报告引科技股暴跌 但如今并非 互联网泡沫2.0
  16. 微信公众号开发 - 配置表设计以及接入公众号接口开发
  17. 赚钱套路分享:降维打击,报团取暖的玩法
  18. Linux 驱动开发 五:Linux LED驱动开发
  19. 修改迅雷下载链接的方法。
  20. matlab exm,exm 《Experiments with MATLAB》这本书的程序源码,附中文注释,简单易懂,是学习 238万源代码下载- www.pudn.com...

热门文章

  1. (翻译)用户友好的表格的9种设计技巧
  2. Python如何配置清华镜像源
  3. R语言学习之深圳市空气质量分析
  4. android兼容低版本方法,Android 应用程序向低版本兼容的问题
  5. 最全的LBS手机定位技术说明
  6. HTML+CSS京东商城静态页面实现(1)
  7. 联想服务器装系统鼠标没反应,联想Thinkpad重装系统后键盘鼠标失灵的解决方法...
  8. 会员积分系统的四大元素
  9. echarts中环形图加边框
  10. 数学基础二:点到直线距离公式推导