zoukankan      html  css  js  c++  java
  • C1:工厂模式 Factory

    最常用的实例化对象模式,用工厂方法替代了实例化对象.

    应用场景:
    A.一个类的子类经常面临着剧烈变化,但却拥有较稳定的接口,或者说拥有相同的接口.工厂方法定义一个用于创建对象的接口,让子类来决定创建那个对象,将对象的实例化延迟.
    B.如给定一张图片,生成对应的图片并添加水印.图片格式有png,jpg等,但他们都需要创建图片,添加水印等方法.
    C.工厂接口根据参数来创建不同的子类对象,提供不同类型的相同方法.

    1.简单工厂:
    工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态的实例化相关类,对于客户端来说,去除了与相关产品的依赖,但随着条件的增多,判断逻辑会增多.

    UML图:

    实例代码:

    abstract class DbServer
    {
        protected $link;
        public function __construct()
        {
    
        }
    
        abstract public function connect();
    
    }
    
    class MySQL extends DbServer
    {
        public function connect()
        {
            // TODO: Implement connect() method.
        }
    
    }
    
    class SqlServer extends DbServer
    {
        public function connect()
        {
            // TODO: Implement connect() method.
        }
    }
    
    
    
    class DbFactory
    {
        const MYSQL = 'MySQL';
        const SQLSERVER = 'SqlServer';
    
        public static function createDb($type)
        {
            switch ($type) {
                case self::MYSQL:
                case self::SQLSERVER:
                    return new $type();
                default:
                    throw new Exception("{$type} class is not exist");
            }
        }
    }
    
    $db = DbFactory::createDb(DbFactory::MYSQL);
    $db->connect();
    

      

     

    2.工厂方法:

    定义一个用于创建对象的接口,让子类决定实例化那个类,工厂模式是一个类的实例化被延迟到子类.

    UML图:

    示例代码:

    abstract class DbServer
    {
        protected $link;
        public function __construct()
        {
    
        }
    
        abstract public function connect();
    
    }
    
    class MySQL extends DbServer
    {
        public function connect()
        {
            // TODO: Implement connect() method.
        }
    
    }
    
    class SqlServer extends DbServer
    {
        public function connect()
        {
            // TODO: Implement connect() method.
        }
    }
    
    interface FactoryInterface
    {
        public static function createDb();
    }
    
    class MySqlFactory implements FactoryInterface
    {
    
        public static function createDb()
        {
            return new MySQL();
        }
    }
    
    class SqlServerFactory implements FactoryInterface
    {
    
        public static function createDb()
        {
            return new SqlServer();
        }
    }
    
    $db = SqlServerFactory::createDb();
    $db->connect();
    

      

     

     

  • 相关阅读:
    Android Studio运行Hello World程序
    WPF,回车即是tab
    phpmyadmin上在某数据库里创建函数
    thinkphp项目部署在phpstudy里的nginx上
    《原创视频》牛腩学docker简记
    visual studio添加docker支持简记
    edge 浏览器中数字显示为链接
    JSON.net 在实体类中自定义日期的格式
    让easyui 的alert 消息框中的确定按钮支持空格键
    修复百度编辑器(UM)禁用时上传图片按钮还可点击的BUG;
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7782322.html
Copyright © 2011-2022 走看看