当前位置: 首页 > wzjs >正文

东莞大朗网站建设哪家口碑好百度sem

东莞大朗网站建设哪家口碑好,百度sem,贵阳哪家网站做优化排名最好,大气简洁企业通用网站模板一:概述 策略模式是一种行为设计模式,来源于《设计模式:可复用面向对象软件的基础》一书。它定义了一组算法,并将它们封装成独立的对象。策略模式在标准模板库(STL)中被广泛使用。 二:策略模式…

一:概述

        策略模式是一种行为设计模式,来源于《设计模式:可复用面向对象软件的基础》一书。它定义了一组算法,并将它们封装成独立的对象。策略模式在标准模板库(STL)中被广泛使用。

二:策略模式的设计实现

      目的
            定义一组算法,并将它们封装成对象。

      别名
            策略(Policy)

      使用场景

          1)需要多种不同版本的算法。

          2)客户端不需要了解具体的算法实现。

         3)需要在程序运行时能够切换算法。

        

1. 策略(Strategy)

       为一组算法定义接口。

2. 具体策略(ConcreteStrategy)

       实现某个具体的算法。

3. 上下文(Context)

      维护对具体策略(ConcreteStrategy)的引用。

      持有一个具体策略(ConcreteStrategy)。

上下文(Context)持有一个封装在对象中的具体策略(ConcreteStrategy)。具体策略实现了策略(Strategy)接口。通常,具体策略可以在程序运行时进行调整。

#include <iostream>
#include <memory>
#include <utility>// 抽象策略类,定义策略接口
class Strategy {
public:virtual void execute() = 0;  // (4) 纯虚函数,具体策略类需要实现此方法virtual ~Strategy() {}       // 虚析构函数,保证子类正确析构
};// 上下文类,负责管理和执行策略
class Context {std::unique_ptr<Strategy> strat{};  // (1) 使用智能指针管理策略对象,确保资源自动释放
public:                                                   void setStrategy(std::unique_ptr<Strategy> strat_) {  // (2) 设置策略,使用 std::move 进行所有权转移strat = std::move(strat_);}void strategy() {  // (3) 执行当前策略(如果存在)if (strat) strat->execute();}
};// 具体策略1,实现 execute 方法
class Strategy1 : public Strategy {
public:void execute() override {  // override 关键字确保正确重写基类方法std::cout << "Strategy1 executed\n";}
};// 具体策略2,实现 execute 方法
class Strategy2 : public Strategy {
public:void execute() override {std::cout << "Strategy2 executed\n";}
};// 具体策略3,实现 execute 方法
class Strategy3 : public Strategy {
public:void execute() override {std::cout << "Strategy3 executed\n";}
};int main() {std::cout << '\n';Context k;  // 创建上下文对象// 设置并执行策略1k.setStrategy(std::make_unique<Strategy1>());k.strategy();// 设置并执行策略2k.setStrategy(std::make_unique<Strategy2>());k.strategy();// 设置并执行策略3k.setStrategy(std::make_unique<Strategy3>());k.strategy();std::cout << '\n';return 0;
}

三:策略模式在C++标准库中的应用 

template<class T, class Allocator = std::allocator<T>>          // (1)
class vector; template<class Key,class T,class Hash = std::hash<Key>,                               // (3)class KeyEqual = std::equal_to<Key>,                       // (4)class allocator = std::allocator<std::pair<const Key, T>>  // (2)
class unordered_map;

      策略模式在 STL 中被广泛应用,主要用于允许用户自定义算法或策略,以适应不同的需求。例如,STL 容器 std::vectorstd::unordered_map 使用 模板参数 作为策略对象,提供了灵活的内存管理、哈希计算等策略的自定义能力。

策略模式的体现:

  1. 哈希函数可替换:如果默认的 std::hash<Key> 不能满足需求(如哈希冲突太多),可以提供自定义哈希函数。
  2. 键比较策略可替换:如果键的比较方式需要修改(如忽略大小写),可以自定义 KeyEqual
  3. 内存分配策略可替换:默认的 std::allocator 可以替换为其他自定义分配器。

四:策略模式的优缺点

   优点

  • 算法被封装成对象,并且可以在运行时进行替换。
  • 添加新的策略非常容易,只需实现一个新的策略类即可。
  • 策略模式可以替代基于 if/elseswitch 语句的条件执行,提高代码的可维护性和扩展性。
  • 在 C++ 中,可调用对象(Callables)通常是策略的轻量级实现。

  缺点

  • 客户端必须了解并选择合适的策略。
  • 可能会导致对象(策略)数量急剧增加。
http://www.dtcms.com/wzjs/378672.html

相关文章:

  • 建设工程施工合同范本最新版seo优化裤子关键词
  • 网站的文章参考文献怎么做市场营销策划方案范文
  • 做网站需要报备什么条件南宁最新消息今天
  • 网站后台发文章图片链接怎么做百度识图找原图
  • 域名解析到网站推广产品吸引人的句子
  • 专门给代购做的网站旅游网站的网页设计
  • 武汉专业网站建设报价乐陵市seo关键词优化
  • 国外网络推广服务沈阳关键词优化报价
  • 宿迁网站建设公司百度指数工具
  • pc28网站开发win7优化软件
  • 做网站的市场有那么大吗专业的郑州网站推广
  • 网站在建设中页面网站维护
  • 成都网站建设哪家专业潍坊在线制作网站
  • 域名网站建设方案建站平台哪个比较权威
  • 私募股权基金网站建设今日军事新闻头条最新
  • 网络舆情应对措施seo优化交流
  • 做网站复杂吗南昌网站开发公司
  • 北京网站建设网站国家免费培训学校
  • 网站右下角弹出广告代码电商平台推广费用大概要多少
  • 安庆哪里做网站百度开发者平台
  • 网站的排版深圳居家办公
  • 中国建筑公司网站名词解释seo
  • 网站建设与管理案例教程第三版答案开网店哪个平台靠谱
  • 网站建设哪个公司靠谱网站关键词优化网站推广
  • 外贸五金网站建设国内销售平台有哪些
  • 石家庄营销型网站制作百度账号注册入口
  • 自己免费建设网站比较开放的浏览器
  • 2008建设网站windows永久禁止更新
  • 建设独立网站的好处电商运营怎么自学
  • 北海做网站网站建设哪家好百度客户端下载