说明
创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
示例
下面看下工厂方法模式的代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| interface Sender{ public function send(); }
class MailSender implements Sender{ public function send(){ print "mail send"; } }
class SmsSender implements Sender{ public function send(){ print "sms send"; } }
interface Provider{ public function produce(): Sender; }
class SendMailFactory implements Provider{ public function produce(): Sender{ return new MailSender(); } }
class SendSmsFactory implements Provider{ public function produce(): Sender{ return new SmsSender(); } }
$sender = (new SendMailFactory())->produce(); $sender->send();
|
总结
优点:扩展性好。如果需要添加个企业微信推送,只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK了。