美文网首页
2020-06-30 工厂模式

2020-06-30 工厂模式

作者: 布衣码农 | 来源:发表于2020-06-30 15:01 被阅读0次

工厂模式


特点

在不修改源代码的情况下可以添加新的模块、符合开闭原则,但是新模块添加的时候需要添加具体的模块类以及对应的工厂类

只能生产相同种类的实例,比如肉类工厂、蔬菜工厂、冰箱工厂......针对某种类型的专业工厂并非综合工厂(抽象工厂)什么都可以加工

角色

  1. 抽象工厂

  2. 具体工厂

  3. 抽象产品

  4. 具体产品

UML图

image.png

应用场景

模块与模块之间衔接的地方可以考虑使用

个人思考:使用Ioc是不是会更好

但工厂方法会制造更多同类型(实现同一接口)的实例,Ioc 是同一个类型实例

代码演示

<?php


interface Platform
{
    public function show();
}

interface PlatformFactory
{
    public function get(): Platform;
}

class PlatformAFactory implements PlatformFactory
{
    public function get(): Platform
    {
        return new PlatformA();
    }
}

class PlatformA implements Platform
{
    public function __construct()
    {
        echo "制造PlatformA" . PHP_EOL;
    }

    public function show()
    {
        echo "PlatformA show" . PHP_EOL;
    }
}


class PlatformBFactory implements PlatformFactory
{
    public function get(): Platform
    {
        return new PlatformB();
    }

}

class PlatformB implements Platform
{
    public function __construct()
    {
        echo "制造PlatformA" . PHP_EOL;
    }

    public function show()
    {
        echo "PlatformB show" . PHP_EOL;
    }
}


class App
{
    public static function run(PlatformFactory $pf)
    {
        # 这里 不管你传递的是哪个工厂,只要实现了PlatformFactory
        # 就可以调用show方法 不必关心哪个工厂
        $pf->get()->show();
    }
}

App::run(new PlatformAFactory());
App::run(new PlatformBFactory());

简单IOC

写下来方便对比

<?php

class Ioc
{
    private static $parsed;

    private static $bind;

    public static function get(string $name)
    {
        if(empty(self::$parsed[$name])) {
            self::$parsed[$name] = call_user_func(self::$bind[$name]);
        }
        return self::$parsed[$name];
    }

    public static function set(string $name, Closure $closure)
    {
        self::$bind [$name] = $closure;
    }
}

相关文章

  • 2020-06-30 工厂模式

    工厂模式 特点 在不修改源代码的情况下可以添加新的模块、符合开闭原则,但是新模块添加的时候需要添加具体的模块类以及...

  • 常用设计模式

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

  • 工厂模式

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

  • 工厂模式

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

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

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

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

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

  • 工厂模式

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

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

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

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

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

  • 设计模式-工厂模式

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

网友评论

      本文标题:2020-06-30 工厂模式

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