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

横沥镇做网站钓鱼网站二维码制作软件

横沥镇做网站,钓鱼网站二维码制作软件,123上网之家网址,squarespace wordpress简介 状态模式#xff08;State Pattern#xff09;是一种行为型设计模式#xff0c;它允许对象在内部状态改变时改变其行为#xff0c;看起来就像是改变了其类。状态模式将对象的状态封装成不同的类#xff0c;并使得对象在不同状态下有不同的行为。 描述 状态模式通过…简介 状态模式State Pattern是一种行为型设计模式它允许对象在内部状态改变时改变其行为看起来就像是改变了其类。状态模式将对象的状态封装成不同的类并使得对象在不同状态下有不同的行为。 描述 状态模式通过将每种状态封装成一个独立的类然后将具体状态类的行为委托给Context类使得Context类在不同的状态下具有不同的行为。这样当Context对象的状态发生变化时它的行为也会随之改变。 原理 状态模式由三个核心组件组成Context上下文类、State抽象状态类和ConcreteState具体状态类。 Context类负责定义切换状态的口并维护一个对当前状态对象的引用。Context类将具体的状态行为委托给当前状态对象。State类是一个抽象类定义了具体状态类需要实现的方法以及在不同状态下Context对象应该具有的行为。ConcreteState类是具体的状态类实现了State类定义的方法并根据当前状态下的需求来执行相应的逻辑。 类图 示例 假设有一个电梯系统其中电梯有三种状态打开状态OpenState、关闭状态ClosedState运行状态RunningState。当电梯处于不同的状态时它的行为也不同。 C示例代码如下 #include iostream// Context class Elevator { public:virtual void open() 0;virtual void close() 0;virtual void run() 0; };// State class ElevatorState { public:virtual void open(Elevator* elevator) 0;virtual void close(Elevator* elevator) 0;virtual void run(Elevator* elevator) 0; };// ConcreteState class OpenState : public ElevatorState { public:void open(Elevator* elevator) override {std::cout The elevator is already open. std::endl;}void close(Elevator* elevator) override {std::cout Closing the elevator... std::endl;elevator-setState(new ClosedState());}void run(Elevator* elevator) override {std::cout Cannot run the elevator while it is open. std::endl;} };class ClosedState : public ElevatorState { public:void open(Elevator* elevator) override {std::cout Opening the elevator... std::endl;elevator-setState(new OpenState());}void close(Elevator* elevator) override {std::cout The elevator is already closed. std::endl;}void run(Elevator* elevator) override {std::cout Running the elevator... std::endl;elevator-setState(new RunningState());} };class RunningState : public ElevatorState { public:void open(Elevator* elevator) override {std::cout Cannot open the elevator while it is running. std::endl;}void close(Elevator* elevator) override {std::cout Cannot close the elevator while it is running. std::endl;}void run(Elevator* elevator) override {std::cout The elevator is already running. std::endl;} };// Concrete Context class ElevatorSystem : public Elevator { public:ElevatorSystem() {currentState new ClosedState();}void setState(ElevatorState* state) {delete currentState;currentState state;}void open() override {currentState-open(this);}void close() override {currentState-close(this);}void run() override {currentState-run(this);}private:ElevatorState* currentState; };// 使用示例 int main() {ElevatorSystem system;system.open(); // Opening the elevator...system.open(); // The elevator is already open.system.close(); // Closing the elevator...system.run(); // Running the elevator...system.close(); // The elevator is already closed.system.open(); // Opening the elevator...system.run(); // Cannot run the elevator while it is open.return 0; }输出结果 Opening the elevator... The elevator is already open. Closing the elevator... Running the elevator... The elevator is already closed. Opening the elevator... Cannot run the elevator while it is open.解释 在上述示例中Elevator类是上下文类Context它定义了切换状态的接口并维护一个对当前状态对象的引用。ElevatorState是抽象状态类State它定义了具体状态类需要实现的方法。OpenState、ClosedState和RunningState是具体状态类ConcreteState它们分别实现了ElevatorState的方法并根据当前状态下的需求执行相应的逻辑。 在示例中创建了一个电梯系统ElevatorSystem初始状态为关闭状态ClosedState。通过调用ElevatorSystem的open、close和run方法来切换电梯的状态并根据不同的状态执行相应的操作。 结论 状态模式通过将对象的状态封装成独立的类并委托给Context类来管理达到了解耦的目的。当对象的状态发生变化时它的行为也会相应地发生变化。 状态模式适用于以下情况 当一个对象的行为取决于其状态并且需要在运行时根据状态改变行为时可以使用状态模式。当一个类有很多状态并且状态之间的转换非常复杂时可以使用状态模式来将每个状态的行为解耦合。 状态模式常见的应用场景包括订单状态管理、电梯状态控制、游戏角色状态机等。
http://www.yutouwan.com/news/366685/

相关文章:

  • 郑州网站制作服务apmserv配置多个网站
  • 正规的h5网站在家做的打字兼职的网站
  • 手机手机网站建设网站模糊背景
  • 广西住房与城乡建设厅网站电话黄图网站有哪些 推荐
  • 网站关键词调整 收录wordpress 生成静态页面
  • 《美食天下》网站的建设江西省赣州市有什么好玩的地方
  • 深圳网站做的好的公司名称wordpress 外链跳转
  • 网站推广与品牌建设cms开发教程
  • 外贸网站推广怎么样华大基因 网站建设公司
  • 网站只有一个首页单页面怎么做排名如何做酒店网站设计
  • 想学网站建设什么的个人网页设计作品简单
  • 做网站可以赚钱嘛升级访问通知正常更新
  • app网站的优点外贸客户如何开发
  • 个人备案企业网站大型行业门户网站开发建设
  • 家装商城系统网站建设新的网站的建设步骤
  • 广州定制网站建设方案书外贸自建站模板
  • 企业网站创建小结网页编辑面试知识
  • 网站建设专业团队图片百度平台商家我的订单查询
  • 网站开发之美 pdf单页网站排名
  • 网络信息工程师衡阳seo外包
  • 开网站平台需要多少钱wordpress访问特别慢
  • 电子商务网站开发形式有做网站的步骤 主题
  • php网站做安卓客户端用来查数据的网站怎么建设
  • 一个网站同时做竞价和seo宁波网站开发建设
  • 搭建网站的流程计算机类十大含金量证书
  • 做直播网站找哪家网站百度关键词怎么做
  • 网站建设绵阳免费俄罗斯网站制作
  • 网络公司网站报价方案网站定制二次开发
  • 企业网站建设与实施调查报告企业型网站
  • 网站建设的方案阿里虚拟主机无法安装wordpress