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 ?>
     
  • 相关阅读:
    深刻剖析spring三种注入方式以及使用注解的原理
    springcloud(一):大话Spring Cloud
    springcloud学习资料汇总
    springboot(一):入门篇
    springboot学习资料汇总
    jvm系列(七):如何优化Java GC「译」
    jvm系列(六):Java服务GC参数调优案例
    jvm系列(五):Java GC 分析
    jvm系列(四):jvm调优-命令篇
    android view、viewgroup 事件响应拦截处理机制
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9416606.html
Copyright © 2011-2022 走看看