什么是设计模式

现在聊起来java设计,那就必然要聊聊设计模式,几年前我刚入行的时候,总是听人说起设计模式,在当时的我看来,那是多么高大上的东西啊,以至于有种遥不可及的感觉,如今自己做java也好几个年头了,今天来谈谈如今我眼中的设计模式

说白了,设计模式就是前辈高人总结出来的一套编写好代码的方法,就好比是面向对象的武林秘籍,凡夫俗子如果能够运用自如也立马能够成为武林高手.

那什么又是虚拟工厂呢?

在聊虚拟工厂之前,我们先举个例子:

 我们把汉堡快餐店抽象到面向对象的世界里,那我们要怎么做呢? 首先我们建造一个快餐店的模型,我们可以在快餐店里点汉堡,点饮料

public interface FastFoodStore {
/**点汉堡 */
Hamburger orderHamburger();/**点饮料 */
Drink orderDrink();
}

 有了快餐店,我们不能忘记最重要的东西--食物, 于是我们有了汉堡和饮料的模型:

public interface Drink {
/** */
public void desc();
}public interface Hamburger {
/** */
void desc();
}

 那么你喜欢吃哪家快餐呢? 我们有很多种选择,比如说KFC,

public class KFC implements FastFoodStore {
/**点KFC的汉堡 */
public Hamburger orderHamburger() {return new KFCHamburger();
}/**点KFC的饮料 */
public Drink orderDrink() {return new KFCDrink();
}}

比如说McDonald:

public class Mcdonald implements FastFoodStore {
/**点McDonald汉堡 */
public Hamburger orderHamburger() {return new McHamburger();
}/**点McDonald饮料 */
public Drink orderDrink() {return  new McDrink();
}
}

当然每个店的口味可不一样,对于KFC,它有自己的汉堡和饮料:

public class KFCDrink implements Drink {
/** */
public void desc() {System.out.println("KFC饮料");
}
}public class KFCHamburger implements Hamburger {
/** */
public void desc() {System.out.println("KFC汉堡");
}
}

McDonald 也一样:

public class McDrink implements Drink {
/** */
public void desc() {System.out.println("Mcdonald饮料");
}
}public class McHamburger implements Hamburger {
/** */
public void desc() {System.out.println("McDonald汉堡");
}
}

纠结了半天,我打算两家都吃一遍:

public static void main(String[] args) {FastFoodStore food ;Hamburger hamburger;Drink drink;//先去KFCfood = new KFC();//点餐hamburger = food.orderHamburger();drink = food.orderDrink();//看看卖相怎么样hamburger.desc();drink.desc();//再去McDonaldfood = new Mcdonald();//点餐hamburger = food.orderHamburger();drink = food.orderDrink();//再看看怎么样hamburger.desc();drink.desc();
}

结果

KFC汉堡
KFC饮料
McDonald汉堡
Mcdonald饮料

其实这就是抽象工厂,引用专业的定义就是 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类

在这个例子中,一组相关的东西就是指汉堡和饮料,我们有KFC和McDonald两个工厂为我们制造这些食物,我们不用关心汉堡和饮料到底是怎么制造的,我们只要知道去哪家店能吃到什么就好,不是吗?

转载于:https://www.cnblogs.com/j2eeDevelper/p/5201654.html

大白话 设计模式之虚拟工厂相关推荐

  1. 重学Java设计模式-创建者模式-工厂方法模式

    重学Java设计模式-创建者模式-工厂方法模式 内容摘自:重学 Java 设计模式:实战工厂方法模式「多种类型商品不同接口,统一发奖服务搭建场景」 | bugstack 虫洞栈 工厂方法模式介绍 图片 ...

  2. getinstance方法详解_二、设计模式总览及工厂模式详解

    二.架构师内功心法之设计模式 2.架构师内功心法之设计模式 2.1.课程目标 1.通过对本章内容的学习,了解设计模式的由来. 2.介绍设计模式能帮我们解决哪些问题. 3.剖析工厂模式的历史由来及应用场 ...

  3. php工程模式,PHP设计模式(八):工厂模式

    Introduction 在PHP设计模式(七):设计模式分类中我们提到过创建设计模式(Creation patterns),创建设计模式专注于设计对象(Object)和实例(Instance)的创建 ...

  4. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  5. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  6. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  7. java设计模式---三种工厂模式

    工厂模式提供创建对象的接口. 工厂模式分为三类:简单工厂模式(Simple Factory), 工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory). GOF ...

  8. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  9. php的类图怎么生成_PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

最新文章

  1. 分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论
  2. android:theme.holo.light.,Android: Theme.Holo.Light.NoActionBar vs Theme.Light.NoTitleBar
  3. vue 监听表格里的数据变化_vue中监听数据变化 watch
  4. 轻松学,Java 中的代理模式(proxy)及动态代理
  5. 知识点实用梳理:广播地址、10 BASE T、介质访问控制、ATM信元与HTTP状态码
  6. 八类网线和七类网线的区别_什么是七类网线?七类网线水晶头如何制作?
  7. LeetCode 895. 最大频率栈(哈希+按频数存储)
  8. 小屏手机大势已去!iPhone 12 Pro Max被买空mini居然还有货
  9. 力扣491. 递增子序列(JavaScript)
  10. zookeeper服务端
  11. 流水账——利用MFC开发的小软件
  12. Oracle Linux 6.3下安装Oracle 11g R2(11.2.0.3)
  13. Calibre转换电子书格式
  14. Win10强制更新怎么关闭 彻底禁止Windows自动更新方
  15. 【汇编与接口】并行接口8255芯片实验
  16. 2021-金三银四跳槽-还愿
  17. linux命令-文件命令
  18. win10计算机显示摄像头,win10系统此电脑添加摄像头(视频设备)图标的操作方法
  19. 应付一天(今天太累)附新东方考研5500词音频
  20. 2021-02-28 Matlab优化拟合曲线

热门文章

  1. Spring boot升级到2.3.2.Release和Spring framework升级到5.28.Release踩过的坑
  2. syn重发_什么是“SYN”请求?ISN又是什么?
  3. 【什么是数据隐私?安全与隐私的区别?】差分隐私代码实现系列(一)
  4. GUI Design Studio 4 5 151 0原型设计工具的使用
  5. C++ I/O流 格式控制(下)
  6. LSTM和GRU介绍
  7. Java操作Oracle
  8. html参考文献_学术规范| 参考文献的格式要求和书写规则
  9. java jexl 工具类_jexl表达式解析、计算工具类.md
  10. python获取网页元素坐标_Python实战爬虫系统学习笔记一:解析网页中的元素