工厂模式-工厂方法模式

工厂模式就是负责将大量有共同接口的类实例,而不必事先知道要实例化哪一个类的模式。工厂模式一般分为三种:简单工厂模式工厂方法模式、抽象工厂模式。从模式性质来说,工厂模式属于创建型模式。

工厂方法定义

工厂方法模式又称为工厂模式,也叫虚拟构造器(Virtual Construct)模式或者多态工厂模式(Polymorphic Factory),在工厂模式中,父类负责定义创建对象的接口,而真正实现创建对象的任务交给子类去实现。这样作的目的是将创建对象的工作延迟到子类中去完成,由子类决定生成哪个具体的对象。

相对模于简单工厂模式来说,工厂方法模式解决了简单工厂模式的缺点-违反开放-封闭原则,将添加更多的产品种类以扩展方式就能实现,而不必去修改工厂类或者产品类。

?
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
42
43
44
45
46
47
48
49
50
51
52
<?php
 
// Factory Method
 
interface IAnimal {
     function Eat();
}
 
class Dog implements IAnimal {
 
     public function Feed() {
         echo "Dog Eat!\n" ;
         echo "<br/>" ;
     }
}
 
class Cat implements IAnimal {
 
     public function Eat() {
         echo "Cat Eat!" ;
         echo "<br/>" ;
     }
}
 
interface Feeder {
     function Feed();
}
 
class DogFeeder implements Feeder {
 
     public function Feed() {
         return new Dog();
     }
}
 
class CatFeeder implements Feeder {
 
     public function Feed() {
         return new Cat();
     }
}
 
// Test
$DogFeeder = new DogFeeder();
$Dog = $DogFeeder ->Feed();
$Dog ->Eat();
 
$CatFeeder = new CatFeeder();
$Cat = $CatFeeder ->Feed();
$Cat ->Eat();
 
?&gt;

上面代码中,我们将喂养动物的任务交给对应喂养动物的子类DogFeeder/CatFeeder去执行,不是在Feeder类中去写逻辑判断该喂养哪一动物。

优点

我们要另外加一新的品种动物的喂养,只需要新增一个动物类以及动物喂养类,然后在主逻辑代码里直接使用对应的动物喂养类调用喂养该动物就好,而不必去修改现在的代码,在遵循开放-封闭原则基础上做到很好的对现有系统的扩展。

缺点

我觉得没什么缺点,唯一缺点就是新增喂养动物需要新写动物类以及具体的动物喂养类,但是这个是必须的呀。

应用场景

  • 类不知道自己要创建哪个对象
  • 类由它的子类类确定创建哪个对象
  • 类将创建对象的职责交个它的子类去实现
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值