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

设计模式-创建型-工厂方法模式.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();
  }
}

适用环境

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

你可能感兴趣的:(设计模式-创建型-工厂方法模式 水果专卖店?)