ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式--->策略模式02

2021-09-13 12:02:17  阅读:134  来源: 互联网

标签:02 Context AlgorithmInterface strategy --- context new 设计模式 public


策略模式

思想

定义了算法家族,分别封装起来,让他们之间可见相互替换,此模式让算法的变化,不会影响到使用算法的客户
场景—>商场促销
在这里插入图片描述

C++

策略模式

/*策略模式*/
#include<iostream>
#include<string>
using namespace std;

class Strategy {
	public:
		virtual void AlgorithmInterface()=0;
};
class ConcreteStrategyA:public Strategy {
	public:
		void AlgorithmInterface() override {
			printf("算法A");
		}
};
class ConcreteStrategyB:public Strategy {
	public:
		void AlgorithmInterface() override {
			printf("算法B");
		}
};
class ConcreteStrategyC:public Strategy {
	public:
		void AlgorithmInterface() override {
			printf("算法C");
		}
};
class Context {
	public:
		Strategy *strategy;
		Context(Strategy *strategy) {
			this->strategy=strategy;
		}
		void ContextInterface() {
			strategy->AlgorithmInterface();
		}
};
//客户端
int main() {
	Context *context=nullptr;

	context=new Context(new ConcreteStrategyA);
	context->ContextInterface();

	context=new Context(new ConcreteStrategyB);
	context->ContextInterface();

	context=new Context(new ConcreteStrategyC);
	context->ContextInterface();
}

策略模式与简单工厂模式结合

/*策略模式与简单工厂模式结合*/
#include<iostream>
#include<string>
using namespace std;

class Strategy {
	public:
		virtual void AlgorithmInterface()=0;
};
class ConcreteStrategyA:public Strategy {
	public:
		void AlgorithmInterface() override {
			printf("算法A");
		}
};
class ConcreteStrategyB:public Strategy {
	public:
		void AlgorithmInterface() override {
			printf("算法B");
		}
};
class ConcreteStrategyC:public Strategy {
	public:
		void AlgorithmInterface() override {
			printf("算法C");
		}
};
class Context {
	public:
		Strategy *strategy;
		Context(char tpye) {
			switch(tpye) {
				case 'A':
					strategy=new ConcreteStrategyA;
					break;
				case 'B':
					strategy=new ConcreteStrategyB;
					break;
				case 'C':
					strategy=new ConcreteStrategyC;
					break;
			}
		}
		void ContextInterface() {
			strategy->AlgorithmInterface();
		}
};
int main() {
	Context *context=nullptr;
	//使得算法与和客户端彻底的隔离
	context=new Context('A');
	context->ContextInterface();
}

GO

策略模式

package main

import "fmt"

type Strategy interface {
	AlgorithmInterface()
}
type ConcreteStrategyA struct {
}
type ConcreteStrategyB struct {
}
type ConcreteStrategyC struct {
}
func (ca *ConcreteStrategyA) AlgorithmInterface() {
	fmt.Println("Algorithm A")
}
func (cb *ConcreteStrategyB) AlgorithmInterface() {
	fmt.Println("Algorithm B")
}
func (cc *ConcreteStrategyC) AlgorithmInterface() {
	fmt.Println("Algorithm C")
}

type Context struct {
	strategy Strategy
}
func (context *Context) ContextInterface() {
	context.strategy.AlgorithmInterface()
}
//客户端
func main(){
	var context Context
	context.strategy=new(ConcreteStrategyA)
	context.ContextInterface()
	context.strategy=new(ConcreteStrategyB)
	context.ContextInterface()
	context.strategy=new(ConcreteStrategyC)
	context.ContextInterface()
}

策略模式与简单工厂模式结合

package main

import "fmt"

type Strategy interface {
	AlgorithmInterface()
}
type ConcreteStrategyA struct {
}
type ConcreteStrategyB struct {
}
type ConcreteStrategyC struct {
}

func (ca *ConcreteStrategyA) AlgorithmInterface() {
	fmt.Println("Algorithm A")
}
func (cb *ConcreteStrategyB) AlgorithmInterface() {
	fmt.Println("Algorithm B")
}
func (cc *ConcreteStrategyC) AlgorithmInterface() {
	fmt.Println("Algorithm C")
}

type Context struct {
	strategy Strategy
}

func (context *Context) ContextInterface() {
	context.strategy.AlgorithmInterface()
}
func (context *Context) init(s string) {
	switch s {
	case "A":
		context.strategy = new(ConcreteStrategyA)
	case "B":
		context.strategy = new(ConcreteStrategyB)
	case "C":
		context.strategy = new(ConcreteStrategyC)
	}
}

//客户端
func main() {
	var context Context
	context.init("A")
	context.ContextInterface()
}

标签:02,Context,AlgorithmInterface,strategy,---,context,new,设计模式,public
来源: https://blog.csdn.net/qq_42956653/article/details/120263674

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有