php设计模式课程---3、为什么会有抽象工厂方法
一、总结
一句话总结:
解决简单工厂方法增加新选择时无法满足面向对象编程中的开闭原则问题
1、什么是面向对象编程中的开闭原则?
应该对类的增加开放,对类的修改闭合:也就是你有什么事,就通过新增类实现,而不要修改原来的类
2、抽象工厂方法如何实现?
类实现接口的方法,每个类负责一种产品,比如读取数据库时,比如是PDO数据库,那么读取配置文件的pdo然后调用pdo类来生成对象即可
3、抽象工厂方法和简单工厂方法实现解决不同种情况的区别是什么?
简单工厂方法:if判断
抽象工厂方法:不同类实现接口,每个类只负责一个产品
二、为什么会有抽象工厂方法
1、相关知识
2、代码
1 <?php
2 /**
3 **/
4
5 // 抽象工厂
6
7 // 开闭原则, 应该对类的增加开放,对类的修改闭合.
8
9 class MySQL {
10
11 }
12
13 class Sqlite {
14
15 }
16
17 class MyPDO {
18
19 }
20
21 /*
22 class Factory {
23 public static function getDB($type) {
24 if($type == 'MySQL') {
25 return new MySQL();
26 } else if($type == 'Sqlite') {
27 return new Sqlite();
28 } else if($type == 'MyPDO') {
29 return new MyPDO();
30 } else {
31 throw new Exception("sorry", 1);
32
33 }
34 }
35 }
36
37
38 // 获取DB对象的时
39 print_r( Factory::getDB('MySQL') );
40 */
41
42 interface Factory {
43 public static function getDB();
44 }
45
46 class MySQLFactory implements Factory {
47 public static function getDB() {
48 return new MySQL();
49 }
50 }
51
52 class SqliteFactory implements Factory {
53 public static function getDB() {
54 return new Sqlite();
55 }
56 }
57
58 class MyPDOFactory implements Factory {
59 public static function getDB() {
60 return new MyPDO();
61 }
62 }
63
64
65 // 配置文件
66 $fact = 'MyPDOFactory';
67 $db = MyPDOFactory::getDB();
68 print_r($db);
69
70
71
72
73
74 ?>