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

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

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. 全部与精简切换显示jQuery实例教程

    下面是某网站上的一个品牌列表展示效果,用户进入页面时,品牌列表默认是精简显示的(即不完整的品牌列表)效果如下图所示: 用户可以单击商品列表下方的“显示全部品牌”按钮来显示全部的品牌.单击“显示全部品牌 ...

  2. PHP常用代码:

    1.$array=explode(separator,$string); //字符串->数组 2.$string=implode(glue,$array);//数组->字符串 3.file ...

  3. C#操作xml的3种方式

    C#操作Xml有很多种方式,这里写出个人常使用的三种方式 XmlDocument DataSet linq to xml  首先声明本次操作使用的xml文件:books.xml:内容如下 <?x ...

  4. 基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    基于 Webpack & Vue & Vue-Router 的 SPA 初体验 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com ...

  5. Recovery和Charger模式下屏幕旋转180度[转]

    如何让Recovery (系统固件升级),charger(关机充电动画)时屏幕旋转180度 解决方法: 1.在bootable\recovery\minui\Graphics.c 文件找到gr_fli ...

  6. WPF会重写Windows GUI的历史吗?

    原文地址:http://tech.it168.com/zx/2007-09-15/200709141320653.shtml 你可能对微软的.NET框架3.0版本的最近的一次更新感到有点奇怪.主版本指 ...

  7. python 单元测试

    http://blog.csdn.net/five3/article/details/7104466

  8. My ECMAScript 7 wishlist

    With ECMAScript 6 now feature complete, any further changes to the core of JavaScript will happen in ...

  9. Cortex-M0 LPC1114中断优先级怎么设置

    LPC1114的中断,由中断控制模块NVIC控制.一共32个中断,每个中断的优先级可编程为 0~3 四种级别.级别越高对应的优先级越低.因此,级别0 是最高的中断优先级. 设置中断优先级的函数,CMI ...

  10. Android Wear开发 - 数据通讯 - 第一节 : 连接数据层

    http://developer.android.com/training/wearables/data-layer/accessing.html Accessing the Wearable Dat ...