前言

本博客主要介绍简单工厂模式(Simple Factory),简单工厂模式是创建型模式的一员,也是我们平时coding用到的比较多的一个模式了。

思考题

首先,让我们思考以下的需求:

博主,突然很想吃宫保鸡丁和西红柿炒鸡蛋,那么博主的需求怎样才能得到满足呢?

当我们没有修炼过 简单工厂模式 这本秘籍,我会自己动手做:

首先我会上百度搜索到制作那两个菜的方法:

KungPaoChicken.java:

public class KungPaoChicken {
private String name = "宫保鸡丁"; @Override
public String toString() {
return name;
}
}

TomatoEgg.java

public class TomatoEgg {
private String name = "西红柿炒鸡蛋"; @Override
public String toString() {
return name;
}
}

然后我开始制作这两个菜:

Custom.java

public class Custom {
public static void main(String... args) {
KungPaoChicken kungPaoChicken = new KungPaoChicken();
TomatoEgg tomatoEgg = new TomatoEgg(); System.out.println(kungPaoChicken);
System.out.println(tomatoEgg);
}
}

所有的东西都是我们自己去操作。

下面我们给出了上面的代码的uml类图:

简单工厂模式(Simple Factory)

定义:提供一个创建对象实例的功能,而无需用户自己去创建,无需关注具体实现。

类图:

上面的类途中一共有三个角色:

  • 抽象产品(Product):负责抽象出一类产品的行为,所有的产品都需要实现这个行为,使工厂可以使用这个类来引用子类的实例。
  • 工厂(Factory):负责实例化产品,并返回父类的引用给用户。将用户和产品的具体实现分离。
  • 具体产品(Concrete):产品的具体实现,不同的产品有不同的实现,但是他们都要继承抽象产品。

重构思考

通过简单工厂的学习,博主突然想去开一个饭店,这样顾客只需要付钱并且点菜就可以吃到想吃的菜了,想想是不是很方便。

首先,我们需要一个 抽象产品 :

Food.java:

public interface Food {
void eat();
}

然后, 具体的产品 :

KungPaoChicken.java:

public class KungPaoChicken implements Food {
@Override
public void eat() {
System.out.println("吃宫保鸡丁");
}
}

TomatoEgg.java:

public class TomatoEgg implements Food {
@Override
public void eat() {
System.out.println("吃西红柿");
}
}

最后,我们创建工厂:

MyHotal.java:

public class MyHotal {
public Food createFood(String foodName) {
switch(foodName) {
case "KungPaoChicken":
return new KungPaoChicken();
case "TomatoEgg":
return new TomatoEgg();
default:
return null;
}
}
}

那么我们来测试一下:

Custom.java:

public class Custom {
public static void main(String ...args) {
MyHotal myHotal = new MyHotal();
Food kungPaoChicken = myHotal.createFood("KungPaoChicken");
Food tomatoEgg = myHotal.createFood("TomatoEgg"); kungPaoChicken.eat();
tomatoEgg.eat();
}
}

[design pattern](4) SImple Factory的更多相关文章

  1. Design Pattern in Simple Examples

    Instead of defining what is design pattern lets define what we mean by design and what we mean by pa ...

  2. [design pattern](6) Absract Factory

    前言 在前面的章节中,我们先后介绍了简单工厂模式和工厂方法模式.他们都是工厂模式大家族的一员,那么,本章将会接着上一章,来说一说工厂模式的最后一员,那就是抽象工厂模式. 思考题 首先,来思考下下面的问 ...

  3. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  4. 【设计模式】简单工厂模式 Simple Factory Pattern

    简单工厂模式Simple Factory Pattern[Simple Factory Pattern]是设计模式里最简单的一个模式,又叫静态工厂模式[Static Factory Pattern], ...

  5. 简单工厂设计模式(Simple Factory Design Pattern)

    [引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见 ...

  6. 大白话简单工厂模式 (Simple Factory Pattern)

    大白话简单工厂模式 (Simple Factory Pattern) 从买车经历说起 毕业两年,码农张小两口无法忍受挤公交,凌晨起床抢火车票的痛苦,遂计划买车.逛了多家4S店,最终定下日产某车型的轿车 ...

  7. Net设计模式实例之简单工厂模式(Simple Factory Pattern)

    一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类, ...

  8. [Design Pattern] Factory Pattern 简单案例

    Factory Pattern , 即工厂模式,用于创建对象的场景,属于创建类的设计模式 . 下面是一个工厂模式案例. Shape 作为接口, Circle, Square, Rectangle 作为 ...

  9. Golang设计模式—简单工厂模式(Simple Factory Pattern)

    Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...

随机推荐

  1. 如何根据对象的属性,对集合(list / set)中的对象进行排序

      一:针对list 通过java.util.Collections的sort方法,有2个参数,第一个参数是list对象,第二个参数是new Comparator<对象类>(){}方法,这 ...

  2. Luogu P3953 [NOIP2017]逛公园

    题目 首先我们跑出从\(1\)出发的最短路\(d1\)和反图上从\(n\)出发的最短路\(dn\). 然后我们处理出长度不超过\(d1_n+k\)的最短路边集,给它拓扑排序. 如果存在环,那么这个环一 ...

  3. cmd打开指定目录技巧

    在win的搜索栏直接打上“cmd”后回车 输入cmd 结果:

  4. 虚拟机Vmware-网络配置

    非主业,只做简单介绍 虚拟机安装完毕后,需要进行网络配置. 虚拟机有 3 种网络连接方式: 仅主机模式 Host-only:仅支持 虚拟机与宿主机之间进行通信,无法连接外网 桥接模式 bridge:可 ...

  5. python之self的理解

    一.self的位置是出现在哪里? 首先,self是在类的方法中的,在调用此方法时,不用给self赋值,Python会自动给他赋值,而且这个值就是类的实例--对象本身.也可以将self换成别的叫法例如s ...

  6. Jade学习(六)之使用html2jade反编译

    我们可以使用html2jade将html编译成jade 首先安装html2jade npm install html2jade -g 用法一:使用html2jade将html转为jade html2j ...

  7. 【转载】Django自带的注册登陆功能

    1.登陆 知识点: a.auth.authenticate(username=name值, password=password值) 验证用户名和密码 b.auth.login(request, use ...

  8. ros基础知识总结

    参考于:ros官网教程 实验楼:ros机器人操作系统自主学习实验 基础知识 1 一个catkin程序包由什么组成? 一个程序包要想称为catkin程序包必须符合以下要求: 该程序包必须包含catkin ...

  9. layui ri laydate的常规使用,并且日期最大不能超过当前日期

    laydate的常规使用,分为两种方式实现日期组件 一.在 layui 模块中使用 下载layui   地址 :https://www.layui.com/  引入资源路径 js 和 css 通过下面 ...

  10. install-info - 更新 info/dir 项

    SYNOPSIS 总览 install-info [OPTION]... [INFO-FILE [DIR-FILE]] DESCRIPTION 描述 从 Info 目录文件 DIR-FILE 中的文件 ...