美文网首页
简单工厂模式、工厂模式、抽象工厂模式

简单工厂模式、工厂模式、抽象工厂模式

作者: one_zheng | 来源:发表于2018-07-25 20:10 被阅读7次

getReceiver

简单工厂模式.jpg

代码:

package simplefactory

// Sender 发送
type Sender interface {
    sender() bool
}


type MailSender struct {
}

func (ms *MailSender) sender() bool {
    return false
}

type SmsSender struct {
}

func (ms *SmsSender) sender() bool {
    return true
}

// SendFactory 发送工厂
type SendFactory struct {
}

func sender(senderType string) bool {
    switch senderType {
    case "mail":
        return new(MailSender).sender()
    case "sms":
        return new(SmsSender).sender()
    }
    return false
}

缺点:不符合开闭原则

工厂模式

工厂模式.jpg

代码:

package simplefactory

// Sender 发送
type Sender interface {
    sender() bool
}


type MailSender struct {
}

func (ms *MailSender) sender() bool {
    return false
}

type SmsSender struct {
}

func (ms *SmsSender) sender() bool {
    return true
}



package factory

type factory interface {
    getSender() bool
}


type mailfactory struct {
}

func (mf *mailfactory) getSender() bool {
    return new(MailSender).sender()
}

type SmsSender struct {
}

func (ms *SmsSender) sender() bool {
    return true
}


缺点:单一

抽象工厂模式

package factory

type factory interface {
    getSender() bool
    getReceiver() bool
}

// Sender 发送
type Sender interface {
    sender() bool
}

// Receive 接受
type Receive interface {
    receive() bool
}

type SmsSender struct {
}

func (ms *SmsSender) sender() bool {
    return true
}



type MailSender struct {
}

func (ms *MailSender) sender() bool {
    return false
}

type SmsReceive struct {
}

func (sr *SmsReceive) receive() bool {
    return true
}

type MailReceive struct {
}

func (mr *MailReceive) receive() bool {
    return true
}


type mailReceiverfactory struct {
}

func (mf *mailReceiverfactory) getReceiver() bool {
    return new(MailReceive).receive()
}


type mailSenderfactory struct {
}

func (mf *mailSenderfactory) getSender() bool {
    return new(MailSender).sender()
}


type smsReceiverfactory struct {
}

func (sf *smsReceiverfactory) getReceiver() bool {
    return new(SmsReceive).receive()
}


type smsSenderfactory struct {
}

func (sf *smsSenderfactory) getSender() bool {
    return new(SmsSender).sender()
}

总结:工厂模式与抽象工厂模式都属于创建型模式,在工厂模式中弥补了简单工厂模式的缺陷(不符合开闭原则),而在抽象工厂模式中弥补了工厂模式的不足(一个工厂只能生产一种产品)

相关文章

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • [Android]三种工厂模式总结。

    Android中,工厂模式分为三种:简单工厂模式、工厂方法模式、抽象工厂模式。 一.简单工厂模式。 定义:简单工厂...

  • 第一章2.0工厂- 基础类准备

    2.1工厂-简单工厂模式2.2工厂-工厂方法模式2.3工厂-抽象工厂模式

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • iOS设计模式-工厂模式

    工厂模式分为简单工厂模式,工厂模式、抽象工厂模式三类。 简单工厂模式 1. 定义 简单工厂模式并不是常用的设计模式...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

网友评论

      本文标题:简单工厂模式、工厂模式、抽象工厂模式

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