PHP 简单工厂设计模式,写给纯小白

目的:将调用者与创建者分离,调用者直接通过调用工厂,减少代码耦合,实现组件的封装,提高系统的可维护性和扩展性。

简单模式的结构(所需类):

1.接口类(用来限定子类的实现方法)

	<?php
  namespace Factory\SimpleFactory;

  interface InterfaceTiger{
      public function name();
  }

2.具体实现子类

	namespace Factory\SimpleFactory;
	class HuananTiger implements IShape
	{
	    public function name()
	    {
	        return '华南虎';
	    }
	}
	class DongbeiTiger implements IShape
	{
	    public function name()
	    {
	        return '东北虎';
	    }
	}

3.工厂类(简单工厂)

<?php
	namespace Factory\SimpleFactory;
	
	class SimpleFactory{
			public static function getTigerName($type)
		    {
		        if ($type == 'huanan') {
		            return new HuananTiger ();
		        } elseif ($type == 'dongbei') {
		            return new DongbeiTiger ();
		        } else {
		            throw new Exception('Error tigertype', 1);
		        }
		    }
	}

4.客户端调用

	$tiger_name = SimpleFactory::getTigerName('huanan')->name();
	echo $tiger_name; //华南虎

综上可以看出,简单模式架构:

1.客户端调用功能API(例如:支付功能,验证账号的合法性、检查支付环境的安全性、验证支付密码、从账号里扣款、通知用户支付结果等功能)
2.Impl 具体实现API功能的类(例如:支付宝支付,微信支付,QQ支付…多个实现类)
3.工厂(根据客户端返回对应的接口对象)
4.客户端通过Factory 获取指定实现类,进行面向对象编程。

缺点:如果增加类的实现,将会对工厂类进行对应的修改,违反了设计模式中的开闭原则(对于扩展代码开放,对于类内修改关闭)

问题:1.现在已经实现了 支付宝支付,微信支付,现在需要加一个QQ钱包支付,一个连连支付等。是不是需要修改SimpleFactory 中的判断?这样造成维护的后果是什么呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值