matlab Promise 协程 跨域 bam tsql authentication search soap pyspark merge parameters count laravel4 db2 Backbonejs npm安装vue 后台ui模板 jquery的点击事件 jquery移除子元素 bitlocker加密好慢 python开发安卓应用 java使用redis matlab输入参数太多 汇编语言clr mysql时间戳转时间 kubernetes架构 python代码 javaindexof java开发环境 java教学 java集成 java数组扩容 lanhelper 简体中文语言包 matlab2016a安装教程 安卓刷机精灵 backtrack4 珊瑚版 编写软件
当前位置: 首页 > 学习教程  > 编程语言

设计模式 ------>抽象工厂模式

2020/7/24 10:54:30 文章标签:

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

它相当于一个中介,他提供每个工厂的联系方式,说明来意后,他就会为你找他所知道的且能满足你的需求的工厂,把你的东西交给你
介绍
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

主要解决:主要解决接口选择的问题。

何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

如何解决:在一个产品族里面,定义多个产品。

关键代码:在一个工厂里聚合多个同类产品。

应用实例:

工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体产品)、时尚装(成套,一系列具体产品),甚至对于一个家庭来说,可能有商务女装、商务男装、时尚女装、时尚男装,这些也都是成套的,即一系列具体产品。假设一种情况(现实中是不存在的,要不然,没法进入共产主义了,但有利于说明抽象工厂模式),在您的家中,某一个衣柜(具体工厂)只能存放某一种这样的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从这个衣柜中取出了。用 OOP 的思想去理解,所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服又包括具体的上衣(某一具体产品),裤子(某一具体产品),这些具体的上衣其实也都是上衣(抽象产品),具体的裤子也都是裤子(另一个抽象产品)。

优点:

当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点:

产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

使用场景:

1、QQ 换皮肤,一整套一起换。 2、生成不同操作系统的程序。

注意事项:

产品族难扩展,产品等级易扩展。

js实现

<script>
    function Student() {
        this.intro = '我是个学生'
    }

    function Teacher() {
        this.intro = '我是个老师'
    }
    //学生工厂
    function studentfactory() {
        return new Student()
    }
    //老师工厂
    function teacherfactory() {
        return new Teacher()
    }
    /* 
        选择工厂
        {string} 老师厂,学生工厂
    */
    function userProcduter(factory) {
        switch (factory) {
            case 'student':
                return studentfactory
                break
            case 'teacher':
                return teacherfactory
                break
            default:
                throw '没有这个厂'
        }
    }
    let factory = userProcduter('student')
    let factory1 = userProcduter('teacher')

    console.log(factory());
    console.log(factory1());
</script>


本文链接: http://www.dtmao.cc/news_show_50358.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?