博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php工厂模式学习笔记
阅读量:4879 次
发布时间:2019-06-11

本文共 2342 字,大约阅读时间需要 7 分钟。

类的实例化延迟到其子类---恢复内容开始---

女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办? 
别忘了是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创建人,具体过程是这样的:先是泥巴捏,然后放八卦炉里烤,再扔到地上成长,但是意外总是会产生的: 
第一次烤泥人,兹兹兹兹~~,感觉应该熟了,往地上一扔,biu~,一个白人诞生了,没烤熟! 
第二次烤泥人,兹兹兹兹兹兹兹兹~~,上次都没烤熟,这次多烤会儿,往地上一扔,嘿,熟过头了,黑人哪! 
第三次烤泥人,兹~兹~兹~,一边烤一边看着,嘿,正正好,Perfect!优品,黄色人种! 【备注:日本人不属此列】
<?php
//
首先定义什么是人类 
 
interface Human {
    
//
人是愉快的,会笑的 
    
public 
function laugh(); 
    
//
人类还会哭,代表痛苦 
    
public 
function cry();
    
//
人类会说话 
    
public 
function talk(); 
}
//
然后定义具体的人种
class YellowHuman 
implements Human {
//
黄色人种,这个翻译的不准确,将就点吧 
    
function cry() { 
var_dump( "黄色人种会哭");}
    
function laugh() {
var_dump( "黄色人种会大笑,幸福呀!");}
    
function talk() {
var_dump( "黄色人种会说话,一般说的都是双字节"); }
}
class WhiteHuman 
implements Human { 
//
白色人种
    
public 
function cry() {
var_dump("白色人种会哭");} 
    
public 
function laugh() {
var_dump("白色人种会大笑,侵略的笑声"); } 
    
public 
function talk() {
var_dump("白色人种会说话,一般都是但是单字节!"); } 
}
class BlackHuman 
implements Human { 
//
黑色人种
    
public 
function cry() {
var_dump("黑色人种会哭");} 
    
public 
function laugh() {
var_dump("黑色人种会大笑,侵略的笑声"); } 
    
public 
function talk() {
var_dump("黑色人种会说话,一般都是但是单字节!"); } 
}
//
人种也定义完毕了,那我们把八卦炉定义出来:
class HumanFactory {
    
//
定一个烤箱,泥巴塞进去,人就出来,这个太先进了 
    
public 
static 
function createHuman( 
$c ){ 
        
if (
$c instanceof Human ) {
//
判断是否继承自Human
            
return 
$c
        }
else {
            
var_dump("必须跟HuMan有一腿"); 
        }
    } 
}
var_dump("------------造出的第一批人是这样的:白人-----------------"); 
$whiteHuman = HumanFactory::createHuman( 
new WhiteHuman()); 
$whiteHuman->cry(); 
$whiteHuman->laugh(); 
$whiteHuman->talk(); 
     
 
//
女娲第二次造人,火候加足点,然后又出了个次品,黑人 
var_dump("\n\n------------造出的第二批人是这样的:黑人-----------------"); 
$blackHuman = HumanFactory::createHuman(
new BlackHuman()); 
$blackHuman->cry(); 
$blackHuman->laugh(); 
$blackHuman->talk(); 
     
//
第三批人了,这次火候掌握的正好,黄色人种(不写黄人,免得引起歧义),备注:RB人不属于此列 
var_dump("\n\n------------造出的第三批人是这样的:黄色人种-----------------"); 
$yellowHuman = HumanFactory::createHuman(
new YellowHuman()); 
$yellowHuman->cry(); 
$yellowHuman->laugh(); 
$yellowHuman->talk();

 

【工厂模式的优点和缺点】

工厂模式的优点

工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。
工厂模式的缺点
客户可能仅仅为了创建一个特定的ConcreteProduct对象,就不得不创建一个Creator子类
【工厂模式适用场景】
1、当一个类不知道它所必须创建的对象的类的时候
2、当一个类希望由它的子类来指定它所创建的对象的时候
3、当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候
【接口】

其中包含接口的知识点。

http://www.cnblogs.com/smallgo/archive/2013/06/13/3133397.html

转载于:https://www.cnblogs.com/smallgo/archive/2013/06/13/3133391.html

你可能感兴趣的文章
GNOME的发展与对比
查看>>
SPOJ PT07X Vertex Cover
查看>>
$ python-json模块的基本用法
查看>>
5.6.3.4 trim()方法
查看>>
Cookie、Session和自定义分页
查看>>
SQL演练
查看>>
React Antd中样式的修改
查看>>
Spring 应用外部属性文件 配置 context 错误
查看>>
导入lxml找不到etree,报ImportError:DLL load failed:找不到指定的程序
查看>>
面向对象一
查看>>
大象的崛起!Hadoop七年发展风雨录
查看>>
图片二值化
查看>>
数据库常用函数
查看>>
集合之TreeSet(含JDK1.8源码分析)
查看>>
C语言学习的记忆
查看>>
Java字符串String操作
查看>>
margin:0 auto是什么意思
查看>>
Lucene学习总结之三:Lucene的索引文件格式(1) 2014-06-25 14:15 1124人阅读 ...
查看>>
温故而知新,可以为师矣,学习到的东西不断回顾,往往能够发现自己的不足...
查看>>
Prime Ring Problem 素数环
查看>>