美文网首页
策略模式-Golang实现

策略模式-Golang实现

作者: Marstin | 来源:发表于2018-12-27 15:01 被阅读0次

目的:根据不同策略来执行对象的相应操作

和工厂模式很像,不同点在于:
工厂模式是传入参数后创建对象,根据传入的参数写逻辑来判断应该创建什么类型的对象,模式的使用者调用对象统一的方法操作。
策略模式是模式的使用者必须先创建好对象,将该对象作为参数传进去,然后通过该对象调用相应的方法。

设计场景如下:
吃饭的时候,我们有三种主食可以选,米饭、面包和苗条。

golang实现代码:

package strategypattern

import "fmt"
/*实体类接口*/
type Staplefood interface {
    Eat()
}

type RiceStaplefood struct {

}

type NoodleStaplefood struct {

}
/*策略类*/
type EatContext struct {
    staplefood Staplefood
}

type BreadStaplefood struct {

}

func (RiceStaplefood) Eat(){
    fmt.Println("吃米饭")
}

func (NoodleStaplefood) Eat() {
    fmt.Println("吃面条")
}

func (BreadStaplefood) Eat() {
    fmt.Println("吃面包")
}
/*策略类操作方法*/
func (context EatContext) EatFood(){
    context.staplefood.Eat()
}
/*策略类构造函数*/
func NewEatContext(staplefood Staplefood) *EatContext{
    return &EatContext{
        staplefood:staplefood,
    }
}

func Excute(){
    eat := NewEatContext(new(RiceStaplefood))
    eat.EatFood()
    eat = NewEatContext(new(NoodleStaplefood))
    eat.EatFood()
    eat = NewEatContext(new(BreadStaplefood))
    eat.EatFood()
}

相关文章

  • 策略模式-Golang实现

    目的:根据不同策略来执行对象的相应操作 和工厂模式很像,不同点在于:工厂模式是传入参数后创建对象,根据传入的参数写...

  • 行为型-Strategy

    策略模式的原理与实现 策略模式的原理与实现策略模式,英文全称是 Strategy Design Pattern。在...

  • 手撸golang 行为型设计模式 策略模式

    手撸golang 行为型设计模式 策略模式 缘起 最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>本系列笔记...

  • 设计模式 | 策略模式及典型应用

    本文的主要内容: 介绍策略模式 示例商场购物打折策略的实现 策略模式总结 源码分析策略模式的典型应用Java Co...

  • 使用策略枚举来代替策略模式

    策略模式实践 举例用策略模式实现加减运算,首先定义抽象策略角色(Strategy接口) 然后定义加减法具体策略角色...

  • seata-golang 接入指南

    seata-golang 是一个分布式事务框架,实现了 AT 模式和 TCC 模式,AT 模式相较 TCC 模式对...

  • 策略模式

    1.策略模式概念 策略模式(Strategy Pattern),实现一个类的行为或其算法可以在运行时更改。策略模式...

  • 使用lambda表达式重构面向对象的设计模式(一)

    策略模式重构 策略模式中的策略在编程中其实就是算法,使用Sttrategy模式可以整体地替换算法的实现部分。能够整...

  • 策略模式

    一 简介 1.定义 策略模式属于对象的行为模式.策略模式能在运行时改变软件的算法行为.如何实现策略模式根据情况而...

  • 策略模式

    类方式实现策略模式 根据不同情况动态选择不同的实例方法 命名元祖实现策略模式 attrgetter有利于函数式编程...

网友评论

      本文标题:策略模式-Golang实现

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