一个人要有思想,技术再牛的人,如果没有一点点文化气氛,那么也是个码农,不能追到女朋友滴。

我这个人文化真心不多,但是比较喜欢读古诗文。虽然读完之后,记在脑海里的不多,不过,就讨一个喜欢【读】。

Leechee:荔枝,南国四大果品居首。

1、简单模式

package patterns.createable.factory;
/**
* "日啖荔枝三百颗,不辞长作岭南人"---摘自 宋朝苏轼·《惠州一绝》
* 古人对荔枝的赞美,频频出现在诗句中
* 的确,这南国的荔枝,的确值得品尝
* 在南国有四大果品中,荔枝居首
*
* @author one
*
*/
public class Leechee { void eat(){
System.out.println("Eat Leechee");
} }
package patterns.createable.factory;

/**
* 好东西,要学会分享,不要掖着。
* 所以开了个荔枝加工厂,让四海之内的兄弟姐妹都尝尝
*
* @author one
*
*/
public class LeecheeFactory { Leechee get() {
return new Leechee();
} }
package patterns.createable.factory;

/**
* 都听说荔枝好吃
* 社区的人都来买来尝尝。
* @author one
*
*/
public class Test { /**
* @param args
*/
public static void main(String[] args) {
//工厂将荔枝打包,发往全国各地
LeecheeFactory lf=new LeecheeFactory(); //荔枝到达了中国皖南地区,那里的人也喜欢,就买了一点
Leechee leechee=lf.get(); //尝尝,的确不错
leechee.eat();
} }

得到的结果:

Eat Leechee

2、工厂方法模式

package patterns.createable.factory;

/**
* "大师兄,不好了,师傅被妖怪抓走了"
* "出什么状况了?"
* "我们的荔枝把妖怪培养成吃货,它们夹持了我们的师傅,要新口味的水果。"
* "这...我来想办法。"思考良久,"老子的香蕉,难道也要分享给这群吃货。"
* "恐怕那些吃货不肯吃啊!"
* "呃...我们只要简单的包装一下。"
* @author one
*
*/
public abstract class Fruit { abstract void eat();
}
package patterns.createable.factory;

/**
* 新鲜口味的水果
* @author one
*
*/ public class Banana extends Fruit { @Override
void eat() {
System.out.println("Eat Banana");
} }
package patterns.createable.factory;

/**
* 这个工厂就是生产香蕉的
* @author one
*
*/
public class BananaFactory { Banana get(){
return new Banana();
} }

好了....师傅放回来了,可是每两周又被妖怪威胁要新的口味,导致我的工厂越来越多,没法管理了,怎么办?

统一一下:

package patterns.createable.factory;

/**
* 成立总部,专做水果生意
* @author one
*
*/
public abstract class FruitFactory { abstract Fruit get(); }

公司改造,上市!

这样让所有的公司统一管理。至于是什么业务,生产什么水果,从总公司拿到订单,吩咐子公司去做就行了。

3、抽象工厂模式

【这个不说,可以理解为:水果加工产业,不属于水果生产,这个时候,就更高一层的把公司“工厂”抽象】

========================

在网上看到很多文章,看到很多人经常把简单工厂模式和工厂方法模式弄混淆,这里再说一下:工厂是具体实例,那么就是产品【荔枝】了,而工厂方法模式是一类产品的抽象【荔枝和香蕉都属于水果】。至于抽象工厂,就是不同产品类了,完全没有产品共性了,但属于莫一个公司【水果和水果加工产业都属于一个公司】,或者一个单位。更高一层的抽象。

FACTORY设计模式【让吃货也能理解的程序】的更多相关文章

  1. 微信小程序开发:学习笔记[7]——理解小程序的宿主环境

    微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器

  2. 大话Spark(3)-一图深入理解WordCount程序在Spark中的执行过程

    本文以WordCount为例, 画图说明spark程序的执行过程 WordCount就是统计一段数据中每个单词出现的次数, 例如hello spark hello you 这段文本中hello出现2次 ...

  3. JAVA设计模式 1 设计模式介绍、单例模式的理解与使用

    数据结构我们已经学了一部分了.是该了解了解设计模式了.习惯了CRUD的你,也该了解了解这一门神器.我为啥要说是神器呢? 因为在大厂的面试环节.以及很多的比如 Springboot Mybatis 等开 ...

  4. 生活中的MVC模式,一个吃货的理解。

    以下是生活中对于MVC模式的领悟,虽然可笑,轻喷. 2015年 8月 26日 M  => Model       模型 我认为叫做模具更好的理解.批量加工生产具有相同特征的东西.        ...

  5. JAVA模板方法设计模式(从现实生活角度理解代码原理)

    概述: 定义一个功能的框架(骨架),一部分功能是确定的,一部分功能是不确定的,先把确定的部分实现,把不确定的部分延迟到子类中实现. 实现该模式的关键步骤: 第一步:抽象类,实现模板方法,定义功能(确定 ...

  6. 阿里P8架构师大话设计模式,体会乐与怒的程序人生中值得回味一幕

    本书特色 本书有两个特色,第一特色是重视过程.看了太多的计算机编程类的图书,大多数书籍都是集中在讲授优秀的解决方案或者一个完美的程序样例,但对这些解决方案和程序的演变过程却重视不够,好书之所以好,就是 ...

  7. 深入理解.NET程序的原理 谈一谈破解.NET软件的工具和方法

    最近一段时间不忙,闲下来的空闲时间,重读了一下CLR的原理,回味一下有关程序集的的知识,顺便练了一下手,学习致用,破解了若干个.NET平台的软件.以此来反观.NET程序开发中,需要注意的一些问题. 基 ...

  8. 【转】正确理解PHP程序编译时的错误信息

    我们编写程序时,无论怎样小心谨慎,犯错总是在所难免的.这些错误通常会迷惑PHP编译器.如果开发人员无法了解编译器报错信息的含义,那么这些错误信息不仅毫无用处,还会常常让人感到沮丧. 编译PHP脚本时, ...

  9. DataAdapter&&DataSet 帮助理解小程序

    // 2105/07/08 // DataAdapter&&DataSet using System; using System.Collections.Generic; using ...

随机推荐

  1. mysql锁死的现象判断

    一般发生表锁死这种低级问题,就有两种情况:1.程序员水平太菜,2.程序逻辑错误. 一旦发生系统会出现超时,关键是有可能你看不到正在活动的php进程,而系统的慢查询日志也不会记录,只能通过show fu ...

  2. asp.net gridview中增加单击单元格事件

    实现功能:单击表格中某个单元格(不是第一列.最后一列.最后一行,不为0)根据行第一个单元格内容及列名来查询详细内容,在消息框中查看显示. 在代码中增加 protected override void ...

  3. script加defer="defer" 的意义

    <script defer="defer">alert("页面加载完我才执行的")</script>先看到这段话 然后再执行上面的 JS ...

  4. 基于BitNami for XAMPP进行Drupal7安装的教程(Win7平台)

    BitNami是一个开源项目,该项目产生的开源软件包可用于安装Web应用程序和解决方案堆栈,以及虚拟设备.BitNami 提供wordpress.joomla.drupal.bbpress等开源程序的 ...

  5. python自动开发之第十八天

    一.JS正则 test - 判断字符串是否符合规定的正则 rep = /\d+/; rep.test("asdfoiklfasdf89asdfasdf") # true rep = ...

  6. Day13 SQLAlchemy连表操作和堡垒机

    一.数据库操作 1.创建表.插入数据和一对多查询 #!/usr/bin/env python # -*- coding: utf-8 -*- # Author: wanghuafeng from sq ...

  7. 工作总结:MFC使用Windows自带打开对话框

    代码: ; //Win98 as default LPARAM lModuleParam = ; TV_INSERTSTRUCT tvItem; CString sPathNameSel; ];//1 ...

  8. JSP页面的异常处理<转>

     对于jsp页面错误处理这里大致有两种方式:一.在Web.xml中配置全局的错误异常处理    即凡是该项目下(即虚拟路径下的所有文件)的任意一个文件错误或者异常,都会跳到指定的错误处理页面.    ...

  9. ZOJ-1508Intervals(差分约束)

    题意: 有一个序列,题目用n个整数组合 [ai,bi,ci]来描述它,[ai,bi,ci]表示在该序列中处于[ai,bi]这个区间的整数至少有ci个.如果存在这样的序列,请求出满足题目要求的最短的序列 ...

  10. 【贪心】Codeforces 704B & 705D Ant Man

    题目链接: http://codeforces.com/problemset/problem/704/B 题目大意: 给N个点,起点S终点T,每个点有X,A,B,C,D,根据I和J的X坐标可得I到J的 ...