* 单例模式:用于创建单一类型的唯一实例对象
* 工厂模式:用于创建多种类型的多个实例对象 //声明形状类 class Shape
{
//声明静态方法create,根据容器形状不同,创建不同图形类的实例 public static function create($type,array $size=[])
{
//检测形状?
switch ($type)
{
//长方形
case 'rectangle':
return new Rectangle($size[0],$size[1]);
break;
//三角形
case 'triangle':
return new Triangle($size[0],$size[1]);
break;
}
}
}
//声明长方形类
class Rectangle
{
private $width; //宽度
private $height; //高度
public function __construct($witch,$height)
{
$this->width = $witch;
$this->height = $height;
}
//计算长方形面积: 宽 * 高
public function area()
{
return $this->width * $this->height;
}
}
//声明三角形类
class Triangle
{
private $bottom; //底边
private $height; //边长
public function __construct($bottom,$height)
{
$this->bottom = $bottom;
$this->height = $height;
}
//计算三角形面积: (底 * 高) / 2
public function area()
{
return ($this->bottom * $this->height)/2;
}
}
//使用静态方法来实例化形状类,而不是用传统的new 关键字
//并根据形状类型参数的不同,来实例化不同的类,生成不同的对象
$rectangle = Shape::create('rectangle',[10,30]);
echo '长方形的面积是'.$rectangle->area();
echo '<hr>';
$triangle = Shape::create('triangle',[20,50]);
echo '三角形的面积是'.$triangle->area();

php工厂模式的实例的更多相关文章

  1. java 抽象工厂模式简单实例

    抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生. 类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易.包含有 ...

  2. C#工厂模式代码实例

    此处示例为一个简易计算器工厂模式的实现. 创建类库,名为CalcLib,我把计算功能全部放在这个类库中. 首先,创建一个抽象的计算器算法父类,如下: /// <summary> /// 计 ...

  3. php设计模式之简单工厂模式代码实例

    <?php header("Content-type:text/html;charset=utf-8"); /** * 共同接口 */ interface db { func ...

  4. C# 设计模式之工厂模式(一)

    写在前面,PS一句:笔记专用,轻拍勿喷,看的不爽绕路前行即可. 一.举栗说明 1.剧情:某银行财务有三位员工,分别为A.B.C三人,主要任务就是去银行取钱,如下: class EmloyeeA: { ...

  5. JS中的工厂模式

    .一个栗子: var BicycleShop = function(){}; BicycleShop.prototype = { sellBicycle : function( model ){ va ...

  6. php实现工厂模式

    设计模式-使用php实现工厂方法模式 [概要] 创建型模式 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使用一个类的实例化延迟到其子类[GOF95] [结构图] ...

  7. 抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式概述 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 抽象工厂抽象工厂,顾名思义,就是比工厂模式更抽象的工厂模式.在工厂模式中,一个具体工厂只负责生产一个具体产品 ...

  8. java常用设计模式二:工厂模式

    1.简单工厂模式(静态工厂方法模式) 抽象实例: public interface People { void talk(); } 具体实例: public class Doctor implemen ...

  9. 设计模式之策略模式&amp;简单工厂模式

    学习设计模式已经有非常长一段时间了,事实上先前已经敲过一遍了.可是老认为没有学到什么,认识也不够深刻.如今趁着重构机房,再又一次来过,也不晚. 事实上在敲了机房之后,看看模式,事实上,曾经非常难理解. ...

随机推荐

  1. CF786B Legacy && 线段树优化连边

    线段树优化连边 要求点 \(x\) 向区间 \([L, R]\) 连边, 一次的复杂度上限为 \(O(n)\) 然后弄成线段树的结构 先父子连边边权为 \(0\) 这样连边就只需要连父亲就可以等效于连 ...

  2. 深入分析HashMap

    本文基于jdk1.8 HashMap特点: HashMap具体方法分析: put方法分析: 执行流程图: public V put(K key, V value) { return putVal(ha ...

  3. python---自定义分页类

    # coding:utf8 # __author: Administrator # date: 2018/3/7 0007 # /usr/bin/env python import tornado.w ...

  4. Kafka 0.10问题点滴

    15.如何消费内部topic: __consumer_offsets 主要是要让它来格式化:GroupMetadataManager.OffsetsMessageFormatter 最后用看了它的源码 ...

  5. sublime 将打字内容放在屏幕中央

    在settings user里添加一句: "scroll_past_end": true

  6. QT_校园导航Update

    //MainWidget.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include " ...

  7. linux 进程 ctrl-c,ctrl-z,ctrl-d

    linux下: ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程.常用于终止正在运行的程序. ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程. ct ...

  8. Selenium自动化Page模式(Python)

    Selenium是当前主流的web自动化工具,提供了多种浏览器的支持(Chrome,Firefox, IE等等),当然大家也可以用自己喜欢的语言(Java,C#,Python等)来写用例,很容易上手. ...

  9. C# 进程的挂起与恢复

    1. 源起: 仍然是模块化编程所引发的需求.产品经理难伺候,女产品经理更甚之~:p 纯属戏谑,技术方案与产品经理无关,芋头莫怪! VCU10项目重构,要求各功能模块以独立进程方式实现,比如:音视频转换 ...

  10. if语句与switch语句

    if语句可以替代switch语句,但是switch语句不能完全替代if语句.比如下面这种就是不对的 switch (len) { case (len <= 4): domLen = 4; bre ...