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

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

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 绑定回车事件 兼容ie8,ie9

    $("#form-search").find('#search-query').bind('keypress', function(e) { var keycode; if(win ...

  2. Jqprint 轻量级页面打印插件

    最近项目中需要在页面上添加一个打印的按钮,上网搜索了一下就发现了这个好用的超轻量插件,使用起来很方便 1.首先需要引入必须的js文件 <script language="javascr ...

  3. scons小结

    scons是用python写的,据说是比make要方便很多,其实我都没写过makeFile...... 1.安装 方式1:下载安装包安装,需要用python setup.py install去编译 方 ...

  4. 数组去重的三种方法及from方法

    直接上代码: var str="adbbckddwerivka"; var arr=str.split(""); console.log(arr); //ind ...

  5. js 代码记录

    window.screen.availWidth 返回当前屏幕宽度(空白空间) window.screen.availHeight 返回当前屏幕高度(空白空间) window.screen.width ...

  6. php函数——『解析 xml数据』

    <?php //该文件是 //$raw_post_data = file_get_contents('php://input'); //file_put_contents('a.txt', $r ...

  7. nginx——rewrite模块

    1.什么是Nginx的Rewrite规则? Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressio ...

  8. Android SurfaceView使用

    与View区别 更新View任务太重会导致UI线程阻塞 而SurfaceView不会,可以在UI线程之外更新UI 工程代码 SurfaceViewDemo.zip ------------------ ...

  9. SVN 使用的简单整理

    1. 在SVN服务器上创建存储Dir,并和个人主机建立联系.      现在SVN服务器上创建一个存储文件夹svn_storeDir.然后在个人电脑上建立一个本地文件夹local_Dir.    进入 ...

  10. EasyUI篇の日期控件

    页面代码: <input type="text" id='astartTime' class="easyui-datebox" style="w ...