• 第二章:造化功 - 工厂模式

    第二章:造化功 - 工厂模式

    武林秘籍

    在编程江湖中,有一门绝世武功名为"造化功",能够凭空创造万物,化腐朽为神奇。

    而在设计模式中,有一门与之对应的绝学——工厂模式

    何为工厂?

    工厂模式,就是通过一个工厂类来创建对象,将对象的创建与使用分离。

    就像武林中的炼器大师,专门负责打造各种神兵利器。

    武功心法

    <?php
    /**
     * 造化功 - 工厂模式
     * 炼器大师,打造神兵利器
     */
    
    // 武器接口
    interface Weapon {
        public function attack();
        public function getName();
    }
    
    // 剑
    class Sword implements Weapon {
        private $name = "倚天剑";
        
        public function attack() {
            return "剑气纵横,无坚不摧!";
        }
        
        public function getName() {
            return $this->name;
        }
    }
    
    // 刀
    class Knife implements Weapon {
        private $name = "屠龙刀";
        
        public function attack() {
            return "刀光如电,霸气十足!";
        }
        
        public function getName() {
            return $this->name;
        }
    }
    
    // 枪
    class Spear implements Weapon {
        private $name = "亮银枪";
        
        public function attack() {
            return "枪出如龙,直取要害!";
        }
        
        public function getName() {
            return $this->name;
        }
    }
    
    // 武器工厂接口
    interface WeaponFactory {
        public function createWeapon();
    }
    
    // 剑工厂
    class SwordFactory implements WeaponFactory {
        public function createWeapon() {
            return new Sword();
        }
    }
    
    // 刀工厂
    class KnifeFactory implements WeaponFactory {
        public function createWeapon() {
            return new Knife();
        }
    }
    
    // 枪工厂
    class SpearFactory implements WeaponFactory {
        public function createWeapon() {
            return new Spear();
        }
    }
    
    // 使用示例
    echo "=== 造化功 - 工厂模式示例 ===\n";
    
    // 创建剑工厂
    $swordFactory = new SwordFactory();
    $sword = $swordFactory->createWeapon();
    echo "武器:{$sword->getName()}\n";
    echo "攻击:{$sword->attack()}\n";
    
    // 创建刀工厂
    $knifeFactory = new KnifeFactory();
    $knife = $knifeFactory->createWeapon();
    echo "武器:{$knife->getName()}\n";
    echo "攻击:{$knife->attack()}\n";
    
    // 创建枪工厂
    $spearFactory = new SpearFactory();
    $spear = $spearFactory->createWeapon();
    echo "武器:{$spear->getName()}\n";
    echo "攻击:{$spear->attack()}\n";
    ?>
    

    江湖应用

    1. 数据库连接 - 不同数据库对应不同工厂
    2. 支付方式 - 支付宝、微信支付等不同工厂
    3. 日志记录 - 文件日志、数据库日志等不同工厂

    造化功要诀

    • 化腐朽为神奇:将复杂的创建过程封装起来
    • 各司其职:创建与使用分离,职责清晰
    • 随心所欲:轻松切换不同类型的对象

    修炼要点

    1. 工厂接口:定义统一的创建接口
    2. 具体工厂:实现接口,创建具体对象
    3. 客户端调用:通过工厂获取对象,无需关心创建细节

    下回预告:第三章:千里眼顺风耳 - 观察者模式

    本文章由设计模式武侠传系列发布