PHP和golang实现设计模式-抽象工厂模式
来源:互联网 发布:启用视频网络 netgear 编辑:程序博客网 时间:2024/06/09 13:48
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
PHP实现:
<?phpdeclare(strict_types = 1);/** * 业务接口 */interface Sender{ public function send(string $msg);}class MailSender implements Sender{ public function send(string $msg){ echo $msg; }}class SmsSender implements Sender{ public function send(string $msg){ echo $msg; }}/** * 工厂接口 */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(); }}$provider = new SendMailFactory();$mailSender = $provider->produce();$mailSender->send('This is mailsender!'."\n");$provider = new SendSmsFactory();$smsSender = $provider->produce();$smsSender->send("This is smssender! \n");
Golang实现:
package mainimport ( "fmt")/** * 业务接口 */type Sender interface { send(msg string)}type MailSender struct {}type SmsSender struct {}func (s MailSender) send(msg string) { fmt.Println(fmt.Sprintf("Mail msg: %s", msg))}func (s SmsSender) send(msg string) { fmt.Println(fmt.Sprintf("Sms msg: %s", msg))}/** * 工厂接口 */type Provider interface { produce() Sender}type SendSmsFactory struct {}type SendMailFactory struct {}func (s SendMailFactory) produce() Sender { return MailSender{}}func (s SendSmsFactory) produce() Sender { return SmsSender{}}func main() { x := make([]Sender, 2) mailProvider := SendMailFactory{} x[0] = mailProvider.produce() smsProvider := SendSmsFactory{} x[1] = smsProvider.produce() for _, s := range x { if x != nil { s.send("Hello world!") } }}
如果你现在想增加一个功能:则只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK了,无需去改动现成的代码。
阅读全文
0 0
- PHP和golang实现设计模式-抽象工厂模式
- PHP和golang实现设计模式-工厂方法模式
- golang实现抽象工厂模式
- PHP实现抽象工厂设计模式
- Golang设计模式-创建型-抽象工厂
- PHP工厂模式和抽象工厂模式
- 设计模式--工厂模式和抽象工厂
- php实现抽象工厂模式
- 【设计模式】之抽象工厂模式-PHP
- php设计模式 抽象工厂模式
- PHP和golang实现设计模式-单例模式
- 设计模式--抽象工厂模式(C++实现)
- 设计模式-抽象工厂模式 C++实现
- php之工厂模式和抽象工厂
- 设计模式:工厂方法和抽象工厂
- 设计模式和原则:抽象工厂模式
- 设计模式-抽象工厂和builder模式
- 设计模式--工厂模式和抽象工厂模式
- Git笔记
- leptonica(一)vs2017编译源码
- C++基础系列:输入输出流条件状态问题
- TCP初探
- java学习资源整理
- PHP和golang实现设计模式-抽象工厂模式
- base的作用于测试
- Zookeeper集群安装
- 详解zabbix安装部署(Server端篇)
- Swift【App版本更新】
- select 标签重置
- HTML Button自动刷新页面的问题
- spingmvc+mybitis所需jar包1
- uva11374迪杰斯特拉最短路径+打印