美文网首页
工厂模式

工厂模式

作者: 萧格 | 来源:发表于2018-08-19 00:32 被阅读0次
  • 简单工厂模式(Simple Factory)

定义

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

实例

<?php

class SimpleFactory
{
    public function createBicycle(): Bicycle
    {
        return new Bicycle();
    }
    public function createCar(): Car
    {
        return new Car();
    }
}

class Bicycle
{
    public function driveTo(string $destination)
    {
        var_dump($destination);
    }
}
class Car
{
    public function driveTo(string $destination)
    {
        var_dump($destination);
    }
}

$factory = new SimpleFactory();
$bicycle = $factory->createCar();
$bicycle->driveTo('XiaoMen');
//输出:string(7) "XiaoMen" 
$bicycle = $factory->createBicycle();
$bicycle->driveTo('FuJian');
//输出:string(6) "FuJian"
?>
  • 工厂方法模式 ( Factory Method)

概念

工厂方法模式 和 简单工厂模式非常接近,唯一不同的是,允许有多个工厂存在,相当于给工厂分组。

规则

  1. 每个工厂必须继承一个抽象类或接口类, 使之成为多态。
  2. 每个产品也必须继承一个抽象类或接口类,也使之成为多态。
  3. 每个工厂必须有一个工厂方法返回产品的实例。

实例

<?php
/**
 * 工厂方法。由于简单工厂违背了开发-封闭原则
 * 工厂方法。将这个改变放到了客户端
 * copyright (c) http://blog.csdn.net/CleverCode
 */

// 运算抽象类
class Operation
{  /*{{{*/

    // 数字A
    protected $_numberA = null;

    // 数字B
    protected $_numberB = null;

    /**
     * 设置成员A
     *
     * @param double $num 数字
     * @return void
     */
    public function setNumberA($num){
        $this->_numberA = $num;
    }

    /**
     * 获取成员A
     *
     * @return double 数字
     */
    public function getNumberA(){
        return $this->_numberA;
    }

    /**
     * 设置成员B
     *
     * @param double $num 数字
     * @return void
     */
    public function setNumberB($num){
        $this->_numberB = $num;
    }

    /**
     * 获取成员B
     *
     * @return double 数字
     */
    public function getNumberB(){
        return $this->_numberA;
    }

    /**
     * 获取运算结果
     *
     * @return double 数字
     */
    public function getResult(){
        return null;
    }
}  /*}}}*/

// 加法类
class OperationAdd extends Operation
{  /*{{{*/

    /**
     * 获取运算结果
     *
     * @return double 数字
     */
    public function getResult(){
        return $this->_numberA + $this->_numberB;
    }
}  /*}}}*/

// 减法类
class OperationSub extends Operation
{  /*{{{*/

    /**
     * 获取运算结果
     *
     * @return double 数字
     */
    public function getResult(){
        return $this->_numberA - $this->_numberB;
    }
}  /*}}}*/

//运算工厂
interface IFactory
{/*{{{*/
    public function createOperate();
}/*}}}*/

//加法工厂
class AddFactory implements IFactory
{/*{{{*/

    public function createOperate()
    {
        return new  OperationAdd();
    }
}/*}}}*/

//减法工厂
class SubFactory implements IFactory
{/*{{{*/
    public function createOperate()
    {
        return new OperationSub();
    }
}/*}}}*/

class Client
{/*{{{*/
    public static function main($a, $b)
    {
        //简单工厂的switch case 放到了客户端了
        $factory = new AddFactory();
        $add = $factory->createOperate();
        // 设置数字A
        $add->setNumberA($a);

        // 设置数字B
        $add->setNumberB($b);

        // 运算
        echo $add->getResult()."\r\n";
    }
}/*}}}*/

Client::main(5,3);
//输出:8
?>

相关文章

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 【设计模式】- 工厂模式

    工厂模式分为三种:简单工厂模式、工厂方法模式和抽象工厂模式。 工厂模式:靠工厂生产对象 简单工厂模式中只有一个工厂...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 第一章2.0工厂- 基础类准备

    2.1工厂-简单工厂模式2.2工厂-工厂方法模式2.3工厂-抽象工厂模式

网友评论

      本文标题:工厂模式

      本文链接:https://www.haomeiwen.com/subject/wwvqiftx.html