喜迎
春节

设计模式——工厂方法模式


说明

创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

示例

下面看下工厂方法模式的代码实现

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();
}
}

// test
$sender = (new SendMailFactory())->produce();
$sender->send();
// 创建公共接口
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();
}
}

// test
$sender = (new SendMailFactory())->produce();
$sender->send();
// output: mail send

总结

优点:扩展性好。如果需要添加个企业微信推送,只需做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK了。


文章作者: Crazy Boy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Crazy Boy !
评 论
 上一篇
设计模式——外观模式
设计模式——外观模式
说明 外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,看下类图:(我们以一个计算机的
2022-05-19
下一篇 
设计模式——桥接模式
设计模式——桥接模式
说明 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基
2022-05-19
  目录