切换到工厂级别

锡纳克

我有一个工厂类,该工厂类根据输入来决定要实例化哪个银行服务,因此我switch在工厂类中使用来创建了它,如下所示:

class BankFactory
{
    public static function build($iban)
    {
        switch ($iban){
            case "123":
                return new BankXService();
            case "456":
                return new BankYService();
        }
    }
}

但是,每当我要添加新的银行服务时,它switch就会变得越来越长。

有没有更好的设计模式可以完成此任务?

β.εηοιτ.βε

在这种情况下,您可以做的是为自己创建一个逻辑关联图,因此您每次添加新银行时都只需要更新关联图即可:

<?php
class BankFactory
{
    private static $bankMap = [
        '123' => BankXService::class,
        '456' => BankYService::class,
    ];
    
    public static function build($iban)
    {
      if(!array_key_exists($iban, self::$bankMap)) {
        throw new InvalidArgumentException(
          'No bank associated with this IBAN pattern'
        );
      }

      return new self::$bankMap[$iban]();
    }
}

class BankXService{}
class BankYService{}

var_dump(BankFactory::build('123'));
var_dump(BankFactory::build('456'));
var_dump(BankFactory::build('789'));

输出:

object(BankXService)#1 (0) { } 

object(BankYService)#1 (0) { } 

Exception: No bank associated with this IBAN pattern

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从用户模式切换到内核模式

来自分类Dev

从Mockito切换到JMockit

来自分类Dev

Notepad ++切换到奇怪的编辑模式

来自分类Dev

是什么阻止了用户空间程序切换到更高级别?

来自分类Dev

从MySQL切换到MariaDB

来自分类Dev

从bottle.template切换到mako

来自分类Dev

使用SnapSvg切换到触摸事件

来自分类Dev

使用perlbrew切换到系统Perl

来自分类Dev

工厂级实施问题

来自分类Dev

从redis切换到Mysql。好主意?

来自分类Dev

从Maven逐渐切换到SBT

来自分类Dev

React不会切换到生产模式

来自分类Dev

VS 2015自动切换到GIT

来自分类Dev

无法在Eclipse Helios中切换到编译器符合性级别1.8

来自分类Dev

SVN从分支切换到中继

来自分类Dev

在JavaScript中从输入切换到按钮

来自分类Dev

将目标SDK切换到API级别30后,三星配件协议无法正常工作?

来自分类Dev

从SizeTiered切换到Scylla db中的级别压缩策略需要多少磁盘空间?

来自分类Dev

在Google地图的最大缩放级别上自动切换到其他mapType

来自分类Dev

从Windows切换到Fedora

来自分类Dev

切换到Ubuntu

来自分类Dev

从MySQL切换到SQLServer:难度级别?

来自分类Dev

工厂级实施问题

来自分类Dev

无法从救援外壳切换到其他目标(运行级别)

来自分类Dev

切换到用户空间

来自分类Dev

从UbuntuGNOME切换到Ubuntu?

来自分类Dev

从ActiveAndroid切换到GreenDao

来自分类Dev

从 Jmockit 切换到 mockito

来自分类Dev

切换到正确的 iframe?