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

网站专题页制作深圳市工程交易服务网

网站专题页制作,深圳市工程交易服务网,龙岗网站建设深圳信科,湖南省建设厅易晓林🧑 主人公:小明,创业升级了! 自从外卖系统用上了工厂方法,小明日子好多了。 但同学们越来越“嚣张”,开始提出各种离谱需求: “我今天点了奶茶,顺便能带份快递吗?” “…

🧑 主人公:小明,创业升级了!

自从外卖系统用上了工厂方法,小明日子好多了。

但同学们越来越“嚣张”,开始提出各种离谱需求:

  • “我今天点了奶茶,顺便能带份快递吗?”

  • “帮我买饭 + 取快递 + 借图书馆书”

  • “我女朋友感冒了,送点纸巾和感冒药,再带封手写情书,谢谢”
    小明震惊:

“你们点的是外卖,还是‘人生管家服务’?”

💥 危机来了!

他的系统原来只支持「点餐」,每种商品类型用一个具体工厂解决(工厂方法),但现在需求变了:

⚠️ 一个服务订单里,包含多个子产品:外卖 + 跑腿 + 快递!

🧠 小明陷入沉思
他意识到:
这不是一个“产品”工厂能搞定的,而是一个“产品族”的工厂!

每种服务类型(比如“外卖套餐服务”)都要提供一整套:
送餐员 + 跑腿员 + 快递员 + 情书写手!

于是,小明设计了自己的「抽象工厂系统」:

🎯 首先,他定义了产品族:

class IFoodDeliver {
public:virtual void deliverFood() = 0;virtual ~IFoodDeliver() {}
};class IExpressDeliver {
public:virtual void deliverExpress() = 0;virtual ~IExpressDeliver() {}
};class IRunner {
public:virtual void runErrand() = 0;virtual ~IRunner() {}
};

🚴 然后,每种“服务组合”实现一整套产品族!

  1. 🌟 校园速配服务(StudentServiceFactory)
class StudentFoodDeliver : public IFoodDeliver {
public:void deliverFood() override {std::cout << "校内兼职甜妹送来奶茶" << std::endl;}
};class StudentExpressDeliver : public IExpressDeliver {
public:void deliverExpress() override {std::cout << "男寝快递员带你顺便送个快递" << std::endl;}
};class StudentRunner : public IRunner {
public:void runErrand() override {std::cout << "学弟送你一封手写情书" << std::endl;}
};
  1. 🏢 专业高端服务(ProServiceFactory)
class ProFoodDeliver : public IFoodDeliver {
public:void deliverFood() override {std::cout << "男模风驰电掣送果汁到你门口" << std::endl;}
};class ProExpressDeliver : public IExpressDeliver {
public:void deliverExpress() override {std::cout << "顺丰小哥到寝室门口等你签收" << std::endl;}
};class ProRunner : public IRunner {
public:void runErrand() override {std::cout << "全职助理帮你排队挂号买药" << std::endl;}
};

🧱 抽象工厂定义:

class IServiceFactory {
public:virtual IFoodDeliver* createFoodDeliver() = 0;virtual IExpressDeliver* createExpressDeliver() = 0;virtual IRunner* createRunner() = 0;virtual ~IServiceFactory() {}
};

🏭 两个具体服务工厂:

class StudentServiceFactory : public IServiceFactory {
public:IFoodDeliver* createFoodDeliver() override {return new StudentFoodDeliver();}IExpressDeliver* createExpressDeliver() override {return new StudentExpressDeliver();}IRunner* createRunner() override {return new StudentRunner();}
};class ProServiceFactory : public IServiceFactory {
public:IFoodDeliver* createFoodDeliver() override {return new ProFoodDeliver();}IExpressDeliver* createExpressDeliver() override {return new ProExpressDeliver();}IRunner* createRunner() override {return new ProRunner();}
};

🧪 使用示例:

void simulateOrder(IServiceFactory* factory) {auto food = factory->createFoodDeliver();auto express = factory->createExpressDeliver();auto runner = factory->createRunner();food->deliverFood();express->deliverExpress();runner->runErrand();delete food;delete express;delete runner;
}
int main() {IServiceFactory* factory = new StudentServiceFactory();simulateOrder(factory);delete factory;std::cout << "---换高端服务---" << std::endl;factory = new ProServiceFactory();simulateOrder(factory);delete factory;
}

💡 最终,小明系统支持:

  • 🌟 定制一整套服务组合(每种服务都有对应实现)

  • 🆕 新增“情侣套餐”或“高考陪跑套餐”,只需添加一组新工厂,无需改老代码

  • 🤝 支持动态切换服务供应商,系统扩展性一流!

❌ 如果不用抽象工厂,小明的结局:

  • 代码写满 if else,每种组合都得硬编码

  • 多个产品之间容易不兼容(甜妹+顺丰大叔?)

  • 增加一个服务种类,要改所有地方,维护地狱

😌 小明感悟:

“现在我不是做平台的,我是做生活服务生态系统的!一个服务,就像一整支小分队,自动出发,统一风格,配合默契。”

不使用抽象工厂

#include <iostream>
#include <string>enum class Grade {A,B
};enum class ProductType {Food,Express,Runner
};// 统一基类
class Delivery {
public:virtual void deliver() = 0;virtual ~Delivery() {}
};// 具体产品
class StudentFoodDeliver : public Delivery {
public:void deliver() override {std::cout << "校内兼职甜妹送来奶茶" << std::endl;}
};class StudentExpressDeliver : public Delivery {
public:void deliver() override {std::cout << "男寝快递员带你顺便送个快递" << std::endl;}
};class StudentRunner : public Delivery {
public:void deliver() override {std::cout << "学弟送你一封手写情书" << std::endl;}
};class ProFoodDeliver : public Delivery {
public:void deliver() override {std::cout << "男模风驰电掣送果汁到你门口" << std::endl;}
};class ProExpressDeliver : public Delivery {
public:void deliver() override {std::cout << "顺丰小哥到寝室门口等你签收" << std::endl;}
};class ProRunner : public Delivery {
public:void deliver() override {std::cout << "全职助理帮你排队挂号买药" << std::endl;}
};Delivery* createDelivery(Grade grade, ProductType type) {if (grade == Grade::A) {if (type == ProductType::Food) {return new StudentFoodDeliver();}else if (type == ProductType::Express) {return new StudentExpressDeliver();}else if (type == ProductType::Runner) {return new StudentRunner();}}else if (grade == Grade::B) {if (type == ProductType::Food) {return new ProFoodDeliver();}else if (type == ProductType::Express) {return new ProExpressDeliver();}else if (type == ProductType::Runner) {return new ProRunner();}}
}int main() {Grade currentGrade = Grade::B;Delivery* delivery1 = createDelivery(currentGrade, ProductType::Food);Delivery* delivery2 = createDelivery(currentGrade, ProductType::Express);Delivery* delivery3 = createDelivery(currentGrade, ProductType::Runner);delivery1->deliver();delivery2->deliver();delivery3->deliver();delete delivery1;delete delivery2;delete delivery3;return 0;
}

在这里插入图片描述

使用抽象工厂

#include <iostream>
class IFoodDeliver {
public:virtual void deliverFood() = 0;virtual ~IFoodDeliver() {}
};class IExpressDeliver {
public:virtual void deliverExpress() = 0;virtual ~IExpressDeliver() {}
};class IRunner {
public:virtual void runErrand() = 0;virtual ~IRunner() {}
};class StudentFoodDeliver : public IFoodDeliver {
public:void deliverFood() override {std::cout << "校内兼职甜妹送来奶茶" << std::endl;}
};class StudentExpressDeliver : public IExpressDeliver {
public:void deliverExpress() override {std::cout << "男寝快递员带你顺便送个快递" << std::endl;}
};class StudentRunner : public IRunner {
public:void runErrand() override {std::cout << "学弟送你一封手写情书" << std::endl;}
};class ProFoodDeliver : public IFoodDeliver {
public:void deliverFood() override {std::cout << "男模风驰电掣送果汁到你门口" << std::endl;}
};class ProExpressDeliver : public IExpressDeliver {
public:void deliverExpress() override {std::cout << "顺丰小哥到寝室门口等你签收" << std::endl;}
};class ProRunner : public IRunner {
public:void runErrand() override {std::cout << "全职助理帮你排队挂号买药" << std::endl;}
};class IServiceFactory {
public:virtual IFoodDeliver* createFoodDeliver() = 0;virtual IExpressDeliver* createExpressDeliver() = 0;virtual IRunner* createRunner() = 0;virtual ~IServiceFactory() {}
};class StudentServiceFactory : public IServiceFactory {
public:IFoodDeliver* createFoodDeliver() override {return new StudentFoodDeliver();}IExpressDeliver* createExpressDeliver() override {return new StudentExpressDeliver();}IRunner* createRunner() override {return new StudentRunner();}
};class ProServiceFactory : public IServiceFactory {
public:IFoodDeliver* createFoodDeliver() override {return new ProFoodDeliver();}IExpressDeliver* createExpressDeliver() override {return new ProExpressDeliver();}IRunner* createRunner() override {return new ProRunner();}
};void simulateOrder(IServiceFactory* factory) {auto food = factory->createFoodDeliver();auto express = factory->createExpressDeliver();auto runner = factory->createRunner();food->deliverFood();express->deliverExpress();runner->runErrand();delete food;delete express;delete runner;
}int main() {IServiceFactory* factory = new StudentServiceFactory();simulateOrder(factory);delete factory;std::cout << "---换高端服务---" << std::endl;factory = new ProServiceFactory();simulateOrder(factory);delete factory;
}

在这里插入图片描述


文章转载自:

http://q9fG9elI.Ljdhj.cn
http://nO8aRkbj.Ljdhj.cn
http://VqPiWycR.Ljdhj.cn
http://MVco5KUx.Ljdhj.cn
http://9wzrnuGm.Ljdhj.cn
http://i4EfFQ7i.Ljdhj.cn
http://G4ifudFW.Ljdhj.cn
http://ubJ5YgMU.Ljdhj.cn
http://pTOmhUfv.Ljdhj.cn
http://9gGC7FVR.Ljdhj.cn
http://cpMjzQwZ.Ljdhj.cn
http://UrarLgij.Ljdhj.cn
http://epQlC4Qs.Ljdhj.cn
http://zkNzytF6.Ljdhj.cn
http://Km83MaAZ.Ljdhj.cn
http://O1zGtXOv.Ljdhj.cn
http://9HYy2z6Z.Ljdhj.cn
http://efoYQkOw.Ljdhj.cn
http://PSfSkTNZ.Ljdhj.cn
http://xW4ytDXY.Ljdhj.cn
http://rV0eGOhL.Ljdhj.cn
http://OVFjqRUM.Ljdhj.cn
http://6hNnRe2j.Ljdhj.cn
http://xLbK84SZ.Ljdhj.cn
http://Vl4gFK8t.Ljdhj.cn
http://x0KrGt3C.Ljdhj.cn
http://ZwI8mxdn.Ljdhj.cn
http://AKL7Ymnm.Ljdhj.cn
http://vei8sow9.Ljdhj.cn
http://Jbnurw1x.Ljdhj.cn
http://www.dtcms.com/wzjs/609015.html

相关文章:

  • 网站做支付端口的费用如何在工商局网站做企业年报
  • 中国建设银行官方网站登录入口连锁 加盟 网站模板
  • 视频背景音乐怎么做mp3下载网站泉州商城网站开发设计
  • 天河岗顶棠下上社网站建设设计seo排名赚能赚钱吗
  • 行业门户网站模板下载电子商务是电商吗
  • wordpress 全站sslwordpress怎么搜索代码
  • 海报设计素材网站免费写个网页多少钱
  • 金华网站建设黄页怎么用域名做网站
  • 网站备案 教程注册google账号
  • 小面网站建设dw个人网站制作
  • 品牌网站建站公司怎么给自己的网站设置关键词
  • 购买域名后怎么做网站网站域名解析错误怎么解决
  • 企业网站开发需求分析模板做网站应聘平台
  • 网站开发价格明细旅游网页设计页面 模板html
  • o2o网站建设价格做网贷网站多少钱
  • js网站统计代码设计公司网站需要什么条件
  • 网站空间 云端机械加工种类
  • 东南融通网站建设wordpress拖拽式
  • 淘宝客怎么做直播网站吗吴江区城乡建设局网站
  • 模具东莞网站建设网站维护都是一些什么公司
  • 网站开发工具大全马鞍山钢铁建设集团有限公司网站
  • 简单的网站有哪些临海响应式网站设计
  • mini主机做网站服务器网站的备案的要多少钱
  • 万网免费建企业网站滨州做网站多少钱
  • 东莞乐从网站建设wordpress去掉浏览数
  • 广州网站优化工具服务住建设部官方网站
  • 锦州制作网站公司龙岩兼职招聘最新发布
  • 小网站从哪找的做预定网站的作用
  • 网站前台管理系统手机网站开发c 教程
  • 网站定制业务合肥网站制作推广