美文网首页
工厂模式

工厂模式

作者: ningsiy | 来源:发表于2018-10-25 17:30 被阅读0次

    介绍

    这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
    在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

    优点

    1、一个调用者想创建一个对象,只要知道其名称就可以了。
    2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
    3、屏蔽产品的具体实现,调用者只关心产品的接口。

    缺点

    每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

    注意

    作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

    代码实现(php)

    <?php
    /**
     * 简单工厂
     * User: ningsiy
     */
    
    
    /**
     * 定义电脑接口
     * Interface Computer
     */
    interface Computer
    {
        public function createComputer();
    }
    
    /**
     * Class Dell
     * 实现电脑接口 (戴尔电脑制造商)
     */
    class Dell implements Computer
    {
        public function createComputer()
        {
            echo '戴尔笔记本<br/>';
        }
    }
    
    /**
     * Class Asus
     * 实现电脑接口 (华硕电脑制造商)
     */
    class Asus implements Computer
    {
        public function createComputer()
        {
            echo '华硕笔记本<br/>';
        }
    }
    
    /**
     * Class SimpleFactory
     * 简单工厂类
     */
    class SimpleFactory
    {
        public static function buy_dell(){
            return new Dell();
        }
    
        public static function buy_asus(){
            return new Asus();
        }
    }
    
    $dell = SimpleFactory::buy_dell();
    $asus = SimpleFactory::buy_asus();
    $dell->createComputer();
    $asus->createComputer();
    

    运行结果

    python实现

    # 简单工厂  ningsiy
    
    
    class Php:
        def __init__(self, lan):
            self.lan = lan
    
        def say(self):
            return self.lan + ' 实现简单工厂模式。'
    
    
    class Java:
        def __init__(self, lan):
            self.lan = lan
    
        def say(self):
            return self.lan + ' 实现简单工厂模式。'
    
    
    class Python:
        def __init__(self, lan):
            self.lan = lan
    
        def say(self):
            return self.lan + ' 实现简单工厂模式。'
    
    
    class UnknowLan:
        def say(self):
            return '操作错误!'
    
    
    class Factory:
        def __init__(self, language):
            self.language = language
    
        def get_say(self):
            if self.language == 'php':
                return Php(self.language)
    
            elif self.language == 'python':
                return Python(self.language)
    
            elif self.language == 'java':
                return Java(self.language)
    
            else:
                return UnknowLan()
    
    
    def test_fac():
        lan = input('请输入编程语言:')
        fac = Factory(lan)
        get_say = fac.get_say()
        say = get_say.say()
        print(say)
    
    
    test_fac()
    
    

    运行结果

    相关文章

      网友评论

          本文标题:工厂模式

          本文链接:https://www.haomeiwen.com/subject/rmjctqtx.html