美文网首页
设计模式-创建型-工厂方法模式 水果专卖店?

设计模式-创建型-工厂方法模式 水果专卖店?

作者: wuzhuoyu | 来源:发表于2022-04-16 23:18 被阅读0次
    设计模式-创建型-工厂方法模式.png

    前言

    工厂模式介绍

    一般情况下,我们会把工厂模式分为三种变体,1. 简单工厂 2. 工厂方法 3. 抽象工厂,平常开发过程中使用最多的一般是前面两种方式,相对于抽象工厂而言原理要简单一些。

    ⚠️ 重点:工厂模式的核心便是关于封装对象的创建

    目录

    设计模式-创建型-简单工厂模式

    设计模式-创建型-工厂方法模式

    设计模式-创建型-抽象工厂模式

    简介

    定义

    工厂方法模式( Factory Method Pattern)隶属于创建型,原理主要是工厂父类主要负责定义产品创建的公共接口,而工厂子类主要负责生产具体的产品。

    特点

    工厂类用来创造具体的产品,外部无需知道产品的创造细节,只需要向工厂索要产品。产品的创造由工厂自行决定,所以工厂只做与之相关的产品创建,进而也方便的系统的扩展。但由于新建产品需要添加新的工厂,所以系统的抽象性和复杂度也随之而来。

    理解实现

    现实模型

    大家都知道我喜欢吃水果,也经常在老乡哪里买水果,所以老乡是越来越富有了😭,开起了水果专卖店还请了一批美女销售员。但是我不仇富,还是经常会买一些🍍、🥭、🍇、🥝、🍉,一开始我都是在一个水果店买老乡的水果,现在我要找各个专卖店的美女买水果了。还是下班前买,吃完它们后开始写水文了。

    分析模型

    主线:我去老乡的专卖店买水果,美女销售员给我,吃完写水文。

    模型1: 我 -> 消费者

    模型2: 水果店专卖店 ->具体产品工厂

    模型3: 美女销售员 -> 创建产品

    模型4: 水果们 -> 产品

    我(消费者[shuaige])

    一周七天,周一到周五上班摸鱼比较费脑子,又不敢提桶,只能买水果补补,不然怎么卷的过各位大佬。

    class Me:ShuaiGe{
        fun eatFruit(){
            (1..7).forEach{
                when(it){
                    1->PineappleFruitStore().createFtuit()
            2->MangoFruitStore().createFtuit()
            3->GrapeFruitStore().createFtuit()
            4->KiwiFruitStore().createFtuit()
            5->WatermelonFruitStore().createFtuit()
            else-> println("周末没赚钱不准吃水果")
                }
            }
        }
    

    老乡的水果专卖店(具体产品工厂)

    老乡还是非常体谅我上班辛苦,对我的要求都是有求必应的,知道我家境清寒,还有心提醒我周末没有赚钱。

    class PineappleFruitStore:FruitStore(){
        override fun createFtuit():Fruit=Pineapple()
    }
    
    class MangoFruitStore:FruitStore(){
        override fun createFtuit():Fruit = Mango()
    }
    
    class GrapeFruitStore:FruitStore(){
        override fun createFtuit():Fruit = Grape()
    }
    
    class KiwiFruitStore:FruitStore(){
        override fun createFtuit():Fruit = Kiwi()
    }
    
    class WatermelonFruitStore:FruitStore(){
        override fun createFtuit():Fruit = Watermelon()
    }
    

    美女销售员(创造产品)

    interface FruitStore{
        fun createFtuit():Fruit
    }
    

    水果们(产品)

    这些就是本帅喜欢的水果了,也就吃的起这些便宜的水果。

    
    class Pineapple:Fruit(){}
    
    class Mango:Fruit(){}
    
    class Grape:Fruit(){}
    
    class Kiwi:Fruit(){}
    
    class Watermelon:Fruit(){}
    
    

    使用实例

    以网络响应解析器功能来说,系统网络请求有多种传输协议规则,有json,xml,yaml,自然我们只需要提供一个解析方法,根据不同的传输协议创建不同的解析器。

    抽象协议解析工厂

    interface IProtocolParserFactory {
        fun createProtocolParser():IProtocolParser
    }
    

    JSON解析器工厂

    class JsonProtocolParserFactory : IProtocolParserFactory {
      override fun createProtocolParser():IProtocolParser {
        return JsonProtocolParser();
      }
    }
    

    XML解析器工厂

    class XmlProtocolParserFactory : IProtocolParserFactory {
      override fun createProtocolParser():IProtocolParser {
        return XmlProtocolParser();
      }
    }
    

    YAML解析器工厂

    class YamlProtocolParserFactory : IProtocolParserFactory {
      override fun createProtocolParser():IProtocolParser {
        return YamlProtocolParser();
      }
    }
    

    适用环境

    如果无法预知对象确切类别及其依赖关系时可使用工厂方法

    相关文章

      网友评论

          本文标题:设计模式-创建型-工厂方法模式 水果专卖店?

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