- 浏览: 761894 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计原则:封装变化,针对接口编程
Stragety.h
Stragety.cpp
设计原则:封装变化,针对接口编程
Stragety.h
#ifndef STRAGETY_H #define STRAGETY_H #include<iostream> using namespace std; class FlyBehavior{ public: virtual void fly()const=0; }; class FlyWithWings:public FlyBehavior{ public: void fly()const{ cout << "i can fly!" << endl; } }; class FlyNoWay:public FlyBehavior{ public: void fly()const{ cout << "i can't fly!" << endl; } }; class FlyRocketPower:public FlyBehavior{//火箭动力器 public: void fly()const{ cout << "i can fly by rocket power" << endl; } }; class QuackBehavior{ public: virtual void quack()const=0; }; class Quack:public QuackBehavior{ public: void quack()const{ cout << "quack" << endl;//呱呱叫 } }; class Squeak:public QuackBehavior{ public: void quack()const{ cout << "squeak" << endl;//吱吱叫 } }; class MuteQuack:public QuackBehavior{ public: void quack()const{ cout << "can't quack" << endl; } }; //普通鸭 class Duck{ public: Duck(); virtual ~Duck(); virtual void swim()const; virtual void display()const; virtual void performQuack()const; virtual void performFly()const; virtual void setFlyBehavior(FlyBehavior* fb); private: QuackBehavior* quackBhr; FlyBehavior* flyBhr; }; //塑料鸭 class PlasticDuck:public Duck{ public: PlasticDuck(); ~PlasticDuck(); void swim()const; void display()const; void performQuack()const; void performFly()const; void setFlyBehavior(FlyBehavior *fb); private: QuackBehavior* quackBhr; FlyBehavior* flyBhr; }; #endif // STRAGETY_H
Stragety.cpp
#include"Stragety.h" Duck::Duck(){ quackBhr = new Quack; flyBhr = new FlyNoWay; } Duck::~Duck(){} void Duck::swim()const{ cout << "duck is swimming!" << endl; } void Duck::display()const{ cout << "i'm a duck" << endl; } void Duck::performFly()const{ flyBhr->fly(); } void Duck::performQuack()const{ quackBhr->quack(); } void Duck::setFlyBehavior(FlyBehavior* fb){ flyBhr = fb; } PlasticDuck::PlasticDuck(){ quackBhr = new MuteQuack; flyBhr = new FlyNoWay; } PlasticDuck::~PlasticDuck(){} void PlasticDuck::display()const{ cout << "i am a plastic duck" << endl; } void PlasticDuck::swim()const{ cout << "plastic duck is swimming" << endl; } void PlasticDuck::performFly()const{ flyBhr->fly(); } void PlasticDuck::performQuack()const{ quackBhr->quack(); } void PlasticDuck::setFlyBehavior(FlyBehavior *fb){ flyBhr = fb; } int main() { Duck *d = new Duck; PlasticDuck *p = new PlasticDuck; cout << "-----common duck-----:" << endl; d->display(); d->swim(); d->performFly(); d->performQuack(); cout << "-----plastic duck-----:" << endl; p->display(); p->swim(); p->performFly(); p->performQuack(); cout << "-----after add rocket power-----:" << endl; p->setFlyBehavior(new FlyRocketPower); p->display(); p->performFly(); } -----common duck-----: i'm a duck duck is swimming! i can't fly! quack -----plastic duck-----: i am a plastic duck plastic duck is swimming i can't fly! can't quack -----after add rocket power-----: i am a plastic duck i can fly by rocket power
发表评论
-
桥接模式(Bridge)
2014-09-26 15:34 813桥接模式:将抽象与实现解耦,使得两者可以独立地变化,抽象部分的 ... -
访问者模式(Visitor)
2014-08-03 13:59 830访问者模式(Visitor),表示一个作用于某对象结构中的各元 ... -
解释器模式(interpreter)
2014-08-03 13:55 673解释器模式(interpreter),给定一个语言,定义它的方 ... -
享元模式(Flyweight)
2014-08-02 09:31 632享元模式(Flyweight):运用共享技术有效地支持大量细粒 ... -
中介者模式(Mediator)
2014-08-02 09:26 441中介者模式(Mediator):用一个中介对象来封装一系列的对 ... -
职责链模式(Responsibility)
2014-07-31 20:36 582职责链模式(Chain of Responsibility): ... -
合成/聚合利用原则
2014-07-29 20:56 585合成/聚合利用原则:尽量使用合成/聚合,尽量不要使用类继承 ... -
组合模式(Composite)
2014-07-27 10:15 430组合模式(Composite):将对象组合成树形结构以表示'部 ... -
备忘录模式(Memento)
2014-07-26 09:09 558备忘录(Memento):在不破坏封装性的前提下,捕获一个对象 ... -
事件委托(delegate)
2014-07-23 20:53 592委托机制的本质就是调用成员函数的函数指针,实现回调 委托就是 ... -
建造者模式(Builder)
2014-07-23 20:45 561建造者模式(Builder):将一个复杂对象的构建与它的表示分 ... -
外观模式(facade)
2014-07-20 09:31 623外观模式(facade):为子系统中的一组接口提供一个一致的界 ... -
迪米特法则
2014-07-19 18:23 403迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发 ... -
原型模式
2014-07-16 20:34 508原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ... -
里氏代换
2014-07-12 09:43 333里氏代换:一个软件实体如果使用的是一个父类的话,那么一定适用于 ... -
依赖倒转
2014-07-12 09:39 390依赖倒转:抽象不应该依赖细节,细节应该依赖抽象,说白了就是针对 ... -
开放-封闭原则
2014-07-12 09:33 557开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展 ... -
单一职责
2014-07-12 09:26 554单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的 ... -
MVC
2011-07-21 17:32 1009MVC是一种复合模式,结合了观察者,策略模式和组合模式。 要 ... -
代理模式(Proxy)
2011-07-19 15:47 921代理模式:为另一个对象提供一个替身或占位符以控制这个对象的访问 ...
相关推荐
策略模式的UML类图包括Context、Stragety、ConcreteStrategyA、ConcreteStrategyB等类别。 Context类是用来操作策略的上下文环境。Stragety是策略的抽象。ConcreteStrategyA、ConcreteStrategyB是具体的策略实现。 ...
informatica update strategy,数字值对应的含义
HanLP: Han Language Processing 汉语言处理包 HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。...
用户故事是在该项目的Stragety Plane阶段定义的。 作为用户,我想: 购买手工陶瓷和艺术品。 了解品牌背后的人。 能够了解有关该品牌正在发生的事情和新变化的更多信息。 能够在网站上进行安全的购买。 能够...
2000-2021年中国科技统计年鉴(分省年度)面板数据集-最新更新.zip
PPT保护工具PDFeditor专业版-精心整理.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
考研英语真题及详解-精心整理.zip
Jupyter-Notebook
全国电子地图行政区划道路水系数据-最新shp.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
地级市进出口贸易及外资利用数据(297城)-最新.zip
HengCe-18900-2024-2030中国皮革制品市场现状研究分析与发展前景预测报告-样本.docx
猪脚饭超好吃 java制作的小游戏,作为巩固java知识之用.zip
【基于Python的大麦网自动抢票工具的设计与实现】 随着互联网技术的发展,网络购票已经成为人们生活中不可或缺的一部分。尤其是在文化娱乐领域,如音乐会、演唱会、戏剧等活动中,热门演出的门票往往在开售后瞬间就被抢购一空。为了解决这个问题,本论文探讨了一种基于Python的自动抢票工具的设计与实现,旨在提高购票的成功率,减轻用户手动抢票的压力。 Python作为一种高级编程语言,因其简洁明了的语法和丰富的第三方库,成为了开发自动化工具的理想选择。Python的特性使得开发过程高效且易于维护。本论文深入介绍了Python语言的基础知识,包括数据类型、控制结构、函数以及模块化编程思想,这些都是构建抢票工具的基础。 自动化工具在现代社会中广泛应用,尤其在网络爬虫、自动化测试等领域。在抢票工具的设计中,主要利用了自动化工具的模拟用户行为、数据解析和定时任务等功能。本论文详细阐述了如何使用Python中的Selenium库来模拟浏览器操作,通过识别网页元素、触发事件,实现对大麦网购票流程的自动化控制。同时,还讨论了BeautifulSoup和requests库在抓取和解析网页数据中的应用。 大麦网作为国内知名的票务平台,其网站结构和购票流程对于抢票工具的实现至关重要。论文中介绍了大麦网的基本情况,包括其业务模式、用户界面特点以及购票流程,为工具的设计提供了实际背景。 在系统需求分析部分,功能需求主要集中在自动登录、监控余票、自动下单和异常处理等方面。抢票工具需要能够自动填充用户信息,实时监控目标演出的票务状态,并在有票时立即下单。此外,为了应对可能出现的网络延迟或服务器错误,工具还需要具备一定的错误恢复能力。性能需求则关注工具的响应速度和稳定性,要求在大量用户同时使用时仍能保持高效运行。 在系统设计阶段,论文详细描述了整体架构,包括前端用户界面、后端逻辑处理以及与大麦网交互的部分。在实现过程中,采用了多线程技术以提高并发性,确保在抢票关键环节的快速响应。此外,还引入了异常处理机制,以应对网络故障或程序错误。 测试与优化是确保抢票工具质量的关键步骤。论文中提到了不同场景下的测试策略,如压力测试、功能测试和性能测试,以验证工具的有效性和稳定性。同时,通过对抢票算法的不断优化,提高工具的成功率。 论文讨论了该工具可能带来的社会影响,包括对消费者体验的改善、对黄牛现象的抑制以及可能引发的公平性问题。此外,还提出了未来的研究方向,如增加多平台支持、优化抢票策略以及考虑云服务的集成,以进一步提升抢票工具的实用性。 本论文全面介绍了基于Python的大麦网自动抢票工具的设计与实现,从理论到实践,从需求分析到系统优化,为读者提供了一个完整的开发案例,对于学习Python编程、自动化工具设计以及理解网络购票市场的运作具有重要的参考价值。
校园驿站全天候辅助取货管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
1970年至2010年美国所有乳制品的供应和利用情况
java基础 java_leetcode题解之Possible Bipartition.java
该开源项目为阿里巴巴数据库事业部精心打造的druid连接池设计源码,包含4689个文件,涵盖4069个Java源文件、297个SQL脚本、102个文本文件以及其他多种文件类型。druid连接池以其独特的监控功能,旨在为数据库连接管理提供高效、可靠的解决方案。项目文件类型丰富,包括HTML、JavaScript、CSS和Shell脚本等,适用于多种开发需求。
Jupyter-Notebook