首页 文章 精选 留言 我的

精选列表

搜索[c/c ],共10000篇文章
优秀的个人博客,低调大师

C++策略模式

简述 策略模式(Strategy Pattern)定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换。Strategy 可以使算法独立于使用算法的客户端。 简述 模式结构 优缺点 适用场景 案例分析 代码实现 版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820 模式结构 UML 结构图: Context(环境角色):持有一个对 Strategy 的引用,最终给客户端调用。 Strategy(抽象策略):定义了一个公共接口,让不同的算法以不同的方式来实现。通过这个接口,Context 可以调用不同的算法。 ConcreteStrategy(具体策略):实现 Strategy 定义的接口,提供具体算法的实现。 优缺点 优点: 各自使用封装的算法,可以很容易地引入新的算法来满足相同的接口。 由于实现的是同一个接口,所以策略之间可以自由切换。 Strategy 使客户端能够选择所需的算法,而无需使用 switch/case 或 if/else 语句。 算法的细节完全封装在 Strategy 类中,因此,可以在不影响 Context 类的情况下更改算法的实现。 缺点: 客户端必须知道所有的策略,了解它们之间的区别,以便适时选择恰当的算法。 策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。 适用场景 多个类有不同的表现形式,每种表现形式可以独立成单独的算法。 需要在不同情况下使用不同的算法,以后算法可能还会增加。 对客户端隐藏具体算法的实现细节,彼此完全独立。 案例分析 说走就走的旅行 - 出行方式 每天,我们做着同样的工作,遇见同样的人,吃着同样的食物。。。日复一日,年复一年!当生活陷入重复,想遇到新鲜的人,新鲜的事,为苍白的生活添加一些色彩,何不来一场说走就走的旅行呢! 要出去玩,有很多种出行方式,自行车、公交车、自驾、地铁、火车、飞机。。。如何选择最合适的呢? 如果离家近,又怕堵车,可以骑自行车。 如果离家远,但想省钱,早点出发,可以乘公交车。 如果有车,并且不介意支付停车费,可以选择自驾。 如果没有车,但赶时间,可以乘出租车。 … 这里的每一种出行方式都是一种具体的策略。如何选择,需要基于成本、便利和时间之间的权衡。 代码实现 创建抽象策略 抽象策略由 IStrategy 表示,它提供了一个 Travel() 接口,用于提供出行方式: // strategy.h #ifndef STRATEGY_H #define STRATEGY_H // 出行策略 class IStrategy { public: virtual void Travel() = 0; }; #endif // STRATEGY_H 创建具体策略 有三种具体的策略可供选择,骑自行车、开车、坐火车: // concrete_strategy.h #ifndef CONCRETE_STRATEGY_H #define CONCRETE_STRATEGY_H #include "strategy.h" #include <iostream> // 骑自行车 class BikeStrategy : public IStrategy { public: virtual void Travel() override { std::cout << "Travel by bike" << std::endl; } }; // 开车 class CarStrategy : public IStrategy { public: virtual void Travel() override { std::cout << "Travel by car" << std::endl; } }; // 坐火车 class TrainStrategy : public IStrategy { public: virtual void Travel() override { std::cout << "Travel by train" << std::endl; } }; #endif // CONCRETE_STRATEGY_H 创建环境角色 环境角色对外提供了一个 Travel() 接口,最终由客户端调用。在内部,它最终调用的是 IStrategy 的相应方法: // context.h #ifndef CONTEXT_H #define CONTEXT_H #include "strategy.h" class Context { public: Context(IStrategy *strategy) { m_pStrategy = strategy; } void Travel() { m_pStrategy->Travel(); } private: IStrategy *m_pStrategy; }; #endif // CONTEXT_H 创建客户端 旅程开始,尽情享受吧: // main.cpp #include "context.h" #include "concrete_strategy.h" #ifndef SAFE_DELETE #define SAFE_DELETE(p) { if(p){delete(p); (p)=NULL;} } #endif int main() { // 策略之间可以相互替换 IStrategy *bike = new BikeStrategy(); IStrategy *car = new CarStrategy(); IStrategy *train = new TrainStrategy(); Context *bikeContext = new Context(bike); Context *carContext = new Context(car); Context *trainContext = new Context(train); bikeContext->Travel(); carContext->Travel(); trainContext->Travel(); SAFE_DELETE(bike); SAFE_DELETE(car); SAFE_DELETE(train); SAFE_DELETE(bikeContext); SAFE_DELETE(carContext); SAFE_DELETE(trainContext); getchar(); return 0; } 输出如下: Travel by bike Travel by car Travel by train

优秀的个人博客,低调大师

C#解析JSON

使用开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/)。下载后添加dll引用就能用。 首先添加引用:using Newtonsoft.Json; 1.Json字符串普通格式解析(常用) string jsonText = "{\"one\":\"西瓜\",\"two\":\"南瓜\"}"; JObject aaa = (JObject)JsonConvert.DeserializeObject(jsonText); string one = aaa["one"].ToString(); string two = aaa["two"].ToString(); 2.Json字符串嵌套格式解析 string jsonText = "{\"fruit\":{\"name\":\"西瓜\",\"name_en\":\"watermelon\"}}"; JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText); string name = jo["fruit"]["name"].ToString(); string name_en = jo["fruit"]["name_en"].ToString(); 3.Json字符串数组格式解析 string jsonArrayText = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]"; //"[{'a':'a1','b':'b1'}]即使只有一个元素,也需要加上[] string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]"; //上面写法和此写法效果一样 JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);//jsonArrayText必须是带[]数组格式字符串 string str = jArray[0]["a"].ToString();

优秀的个人博客,低调大师

C++小例子

#include <iostream> #include <conio.h> int main(){ std::cout<<"Enter two numbers:"<<std::endl; int v1,v2; std::cin>>v1>>v2; int lower,upper; if(v1<=v2){ lower = v1; upper = v2; }else{ lower = v2; upper = v1; } int sum = 0; for(int val = lower;val<=upper;++val){ sum +=val; } std::cout<<"Sum of "<<lower<<"to"<<upper <<" is " <<sum<<std::endl; getch(); return 0; } 输入两个数 计算出,他们之间的和 例如输入1、3 计算1+2+3 本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/3723660.html,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册