[design pattern](4) SImple Factory
前言
本博客主要介绍简单工厂模式(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的更多相关文章
- 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 ...
- [design pattern](6) Absract Factory
前言 在前面的章节中,我们先后介绍了简单工厂模式和工厂方法模式.他们都是工厂模式大家族的一员,那么,本章将会接着上一章,来说一说工厂模式的最后一员,那就是抽象工厂模式. 思考题 首先,来思考下下面的问 ...
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- 【设计模式】简单工厂模式 Simple Factory Pattern
简单工厂模式Simple Factory Pattern[Simple Factory Pattern]是设计模式里最简单的一个模式,又叫静态工厂模式[Static Factory Pattern], ...
- 简单工厂设计模式(Simple Factory Design Pattern)
[引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见 ...
- 大白话简单工厂模式 (Simple Factory Pattern)
大白话简单工厂模式 (Simple Factory Pattern) 从买车经历说起 毕业两年,码农张小两口无法忍受挤公交,凌晨起床抢火车票的痛苦,遂计划买车.逛了多家4S店,最终定下日产某车型的轿车 ...
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类, ...
- [Design Pattern] Factory Pattern 简单案例
Factory Pattern , 即工厂模式,用于创建对象的场景,属于创建类的设计模式 . 下面是一个工厂模式案例. Shape 作为接口, Circle, Square, Rectangle 作为 ...
- Golang设计模式—简单工厂模式(Simple Factory Pattern)
Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...
随机推荐
- Spring(八)-- 代理设计模式
代理设计模式 1:基本概念 2:JDK动态代理 1. 创建接口 2. 创建实现类 3. 创建代理类 /** * jdk动态代理 不能满足 继承父类的情况 * * AnimalProxy 代理类 */ ...
- 2017.10.21 C组比赛总结
今天考得不太好,只拿了100+0+0+30=130分... [GDKOI训练]音乐节拍 考场AC了! 其实就是大水一道! 思路:二分查找 每次输入后,输出该时刻所在的区间的编号就好了. 总体难度:★★ ...
- springmvc中的视图模型的返回方式
way1:略过; way2:(神似way1)通过在方法的参数中添加一个Model类型的参数,,该参数由spring自动生成传入, 然后在方法内部使用addAttribute()方式添加模型数据, 最后 ...
- ES的索引、type、document、filer、mapping、id
一.ES的存储结构 1.索引 es 中存储数据的基本单位,比如说你现在要在 es 中存储一些订单数据,你就应该在 es 中创建一个索引 order_idx,所有的订单数据就都写到这个索引里面去.看了一 ...
- Centos7安装Python3的方法[转]
Centos7安装Python3的方法 由于centos7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到. [root@VM_105_217_ ...
- 012-zabbix主动模式
6.1 主动模式 zabbix agent检测分为主动(agent active)和被动(agent)两种形式,主动与被动的说法均是相对于agent来讨论的.简单说明一下主动与被动的区别如下: 主动: ...
- GPT-2,吓坏创造者的「深度造假写手」
简评: 今年二月份刷屏的 GPT-2 着实厉害,那个生成续写故事的例子更是效果好到吓人一跳,它到底有多厉害,本文略微讲讲.更详细的信息可参考文末 OpenAI 的博客链接. 你能从下面这两段文字里品味 ...
- ui自动化之selenium操作(三)xpath定位
xpath 的定位方法,非常强大.使用这种方法几乎可以定位到页面上的任意元素. 1. 什么是xpath? xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们 ...
- robotframework ride报错 Keyword 'BuiltIn.Log' expected 1 to 5 arguments, got 12.
错误原因,else和else if使用了小写,必须使用大写才能识别到.
- Redis数据类型之列表操作
redis 目录: 1.自动分配(redis) - 批量导入 2.微信自动绑定 3.django的ORM做不了的操作,怎么自定义操作数据库 extra ’ 4.报表 公司每个月销售的业绩 5.权限 = ...