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

简述网站一般建设的流程图fizz wordpress

简述网站一般建设的流程图,fizz wordpress,网络营销推广方法范文,做网站思路Replace Type Code with State/Strategy 要将 Type Code 替换为 State/Strategy 模式,你的目的是通过将行为分离到独立的类中来消除使用类型代码(如整数、字符串或枚举类型)来决定行为的需要。这种做法能够让系统变得更加灵活和易于维护。 …

Replace Type Code with State/Strategy

要将 Type Code 替换为 State/Strategy 模式,你的目的是通过将行为分离到独立的类中来消除使用类型代码(如整数、字符串或枚举类型)来决定行为的需要。这种做法能够让系统变得更加灵活和易于维护。

理解 Type Code

首先,让我们明确什么是 Type Code。通常,这种类型代码(如枚举类型或整数值)会决定某些行为。例如,假设你有以下代码:

enum class Status { Inactive, Active, Pending };class User {
public:Status status;void performAction() {if (status == Status::Inactive) {// 执行 Inactive 状态下的行为} else if (status == Status::Active) {// 执行 Active 状态下的行为} else if (status == Status::Pending) {// 执行 Pending 状态下的行为}}
};

这个 performAction() 方法通过 if 或 switch 来检查 status,并根据不同的状态执行不同的逻辑。这种方式在状态增加时非常难以维护,因为每增加一个状态,都需要修改这个方法,违反了开放封闭原则。

使用 State 或 Strategy 模式

我们将这种行为分离到各自的类中,这样就不再需要用条件判断来切换行为了。

State 模式

State 模式适用于对象的状态变化决定其行为。你可以为每个状态创建一个类,并将具体行为封装在这些类中。

例如:

class State {
public:virtual ~State() = default;virtual void performAction() = 0;
};class InactiveState : public State {
public:void performAction() override {// 执行 Inactive 状态下的行为}
};class ActiveState : public State {
public:void performAction() override {// 执行 Active 状态下的行为}
};class PendingState : public State {
public:void performAction() override {// 执行 Pending 状态下的行为}
};class User {
private:std::unique_ptr<State> state;  // 使用智能指针管理状态
public:User(std::unique_ptr<State> initialState) : state(std::move(initialState)) {}void setState(std::unique_ptr<State> newState) {state = std::move(newState);  // 动态改变状态}void performAction() {state->performAction();  // 调用当前状态的行为}
};

这样,通过将每个状态的行为封装到自己的类中,你可以方便地改变用户的状态而不需要修改原有的逻辑。

Strategy 模式

Strategy 模式适用于当你需要在不同的算法或行为之间进行选择时。与 State 模式不同,Strategy 模式侧重于不同的行为或策略。

例如,假设你有不同的支付方式,你可以通过 Strategy 模式来选择不同的支付策略:

class PaymentStrategy {
public:virtual ~PaymentStrategy() = default;virtual void pay() = 0;
};class CreditCardPayment : public PaymentStrategy {
public:void pay() override {// 信用卡支付的逻辑}
};class PayPalPayment : public PaymentStrategy {
public:void pay() override {// PayPal 支付的逻辑}
};class BitcoinPayment : public PaymentStrategy {
public:void pay() override {// 比特币支付的逻辑}
};class Order {
private:std::unique_ptr<PaymentStrategy> paymentStrategy;
public:Order(std::unique_ptr<PaymentStrategy> strategy) : paymentStrategy(std::move(strategy)) {}void setPaymentStrategy(std::unique_ptr<PaymentStrategy> newStrategy) {paymentStrategy = std::move(newStrategy);  // 动态改变支付策略}void executePayment() {paymentStrategy->pay();  // 使用当前的支付策略}
};

状态管理与策略管理

你可以根据需求选择 State 或 Strategy 模式:

  • State 模式:如果行为取决于对象的内在状态并且需要在状态之间切换(例如用户的不同状态:Inactive, Active,
    Pending)。
  • Strategy 模式:如果你有多个独立的行为或策略,可以根据不同的条件选择执行哪一个策略(例如支付策略、排序策略等)。

重构后的代码结构

如果将原来的 User 类中的 if 判断转换成 State 模式,它将变得更加灵活。例如:

int main() {// 创建不同状态的用户User user(std::make_unique<InactiveState>());// 执行 Inactive 状态下的行为user.performAction();// 切换到 Active 状态user.setState(std::make_unique<ActiveState>());// 执行 Active 状态下的行为user.performAction();// 切换到 Pending 状态user.setState(std::make_unique<PendingState>());// 执行 Pending 状态下的行为user.performAction();
}

优点

  • 清晰的代码结构:每个状态或策略的行为都被封装在各自的类中,代码更加模块化。
  • 易于扩展:如果将来需要添加新的状态或策略,只需创建新的类,而不需要修改现有的代码。
  • 符合开放封闭原则:你可以在不修改现有代码的情况下轻松扩展系统。

总结

将 Type Code 替换为 State 或 Strategy 模式,可以使你的代码更加灵活、可维护,并且符合面向对象设计的原则。通过将不同的行为委托给不同的类,你避免了在条件语句中重复判断类型,增加了系统的可扩展性。


文章转载自:

http://q7Ziq8OW.bzLsf.cn
http://spAREgZH.bzLsf.cn
http://RmfFaCah.bzLsf.cn
http://ub7eQ9JK.bzLsf.cn
http://HpVwBj7q.bzLsf.cn
http://jLEBbhUS.bzLsf.cn
http://eVWz9gjL.bzLsf.cn
http://poNAU2cj.bzLsf.cn
http://H3M4jwwD.bzLsf.cn
http://a5c6aVol.bzLsf.cn
http://LmpNPAC3.bzLsf.cn
http://1UQHWILw.bzLsf.cn
http://u28q18uZ.bzLsf.cn
http://grE1lASD.bzLsf.cn
http://TqqcUk53.bzLsf.cn
http://TaRjv8Ht.bzLsf.cn
http://8B7PhyP5.bzLsf.cn
http://C6Ui7BRU.bzLsf.cn
http://blyD7kdf.bzLsf.cn
http://6s5Du1p6.bzLsf.cn
http://SwTLr4ib.bzLsf.cn
http://8zcnBzuj.bzLsf.cn
http://u8R5EwWC.bzLsf.cn
http://AgmEX7yc.bzLsf.cn
http://OE2ParGL.bzLsf.cn
http://ISUXQg6x.bzLsf.cn
http://5ArYKdkT.bzLsf.cn
http://mXrR2LUr.bzLsf.cn
http://8flOIsro.bzLsf.cn
http://kssJzKEu.bzLsf.cn
http://www.dtcms.com/wzjs/698807.html

相关文章:

  • wordpress 二次元模板昆明seo外包
  • 怎样写网站描述简约大方网站
  • 禁止指定ip访问网站那家网站做的效果好
  • 佛山市外贸网站建设搭建网站需要学什么软件
  • 做网站必须要买空间上海 装修公司推荐
  • 网站建设办公怎么注册域名免费
  • 什么网站可以做报名系统wordpress速度慢解决方法
  • 怎么做网站服务器专业建站方案
  • 什么是网站二级目录企业网站建设计划
  • 小型求职招聘网站源码 phpwordpress小工具开发教程
  • 外贸商城网站系统临汾做网站的公司
  • 网站设计建设公司教程软件开发接单网站
  • 这么用自己的电脑做网站服务器网站建设合同建设方注意事项
  • 保定模板建站平台什邡门户网站
  • 020网站开发兰州网站设计有限公司
  • 摄影网站建立购买空间后怎么上传网站
  • 网站设计者哈尔滨seo优化
  • 小榄网站建设公司html5手机网站开发教程
  • 腾冲网站建设建设公司网站都需要什么科目
  • 地方门户网站如何宣传电商网站建设流程图
  • 网站备案 影响wordpress 模版 推荐
  • 企业建站 炫酷模板一人有限公司怎么注册
  • 郴州网站建设公司官网网站如何防止重登录
  • 企业网站建设的困难和问题甘肃第九建设集团公司网站
  • 网站主机的类型网站程序更换
  • 天津的公司能在北京做网站备案吗高大上网站欣赏
  • 做宣传网站大概多少钱800多块做网站
  • 网站seo快排软件免费制作短视频软件
  • 宣传型网站建设网页布局设计的一般步骤
  • 做网站推广我们是专业的泉州服装电商网站建设