zoukankan      html  css  js  c++  java
  • php设计模式课程---3、为什么会有抽象工厂方法

    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 ?>
     
  • 相关阅读:
    cin.clear()与cin.sync()的使用
    win10无法连接windows服务器,无法连接SENS服务
    Error:java: 错误: 不支持发行版本 5
    IDEA 整合 SSM 框架学习
    python requests请求状态码异常处理
    python+requests接口自动化入门--返回值的处理
    Python bug打断点调试学习
    locust知识导航栏
    ERROR: unknown command "pip"
    Python3 集合
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9416606.html
Copyright © 2011-2022 走看看