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

轻松网站建设台州seo排名扣费

轻松网站建设,台州seo排名扣费,百度搜自己的网站,wordpress 主题 英文概念#xff1a; 代码的工厂模式是一种设计模式#xff0c;用于创建对象实例而无需直接调用构造函数。它提供了一种更加灵活和可维护的方式来创建对象#xff0c;尤其是在需要根据不同情况创建不同类型的对象时非常有用。工厂模式隐藏了对象的创建细节#xff0c;使代码更…概念 代码的工厂模式是一种设计模式用于创建对象实例而无需直接调用构造函数。它提供了一种更加灵活和可维护的方式来创建对象尤其是在需要根据不同情况创建不同类型的对象时非常有用。工厂模式隐藏了对象的创建细节使代码更加模块化和可扩展。 包括的关键元素 工厂方法Factory Method这是一个方法或函数负责创建对象实例。工厂方法通常接受一些参数根据这些参数来确定应该创建哪种类型的对象。 产品Product产品是工厂方法创建的对象实例。产品通常是某个类的实例。 具体工厂Concrete Factory具体工厂是实际执行对象创建的类或函数。每个具体工厂通常负责创建特定类型的产品。 具体产品Concrete Product具体产品是由具体工厂创建的对象实例它们是产品的具体实现。 工厂模式的主要优点 封装对象创建过程工厂模式将对象的创建逻辑封装在一个函数或类中使客户端代码无需关心对象的具体创建方式。这可以减少代码的重复性提高代码的可维护性和可读性。 灵活性通过工厂模式可以轻松地更改对象的创建方式例如切换到不同的实现类或版本而无需修改大量客户端代码。 解耦合工厂模式有助于减少类之间的直接依赖关系。客户端代码不需要了解对象的具体类只需与工厂接口或函数交互。这降低了耦合度使系统更容易维护和扩展。 单一职责原则工厂模式有助于遵循单一职责原则因为它将对象的创建职责从客户端代码中分离出来并将其委托给专门的工厂类或函数。 代码组织工厂模式可以帮助组织代码将对象创建逻辑集中在一个地方使代码更加结构化和清晰。 测试和调试工厂模式使得在单元测试中更容易替换模拟对象从而更容易进行单元测试和调试。 总之工厂模式是一种设计模式有助于提高代码的可维护性、可扩展性和可测试性同时降低了代码的耦合度是面向对象编程中常用的一种设计方法之一。 代码案例  源代码 #include stdio.hstruct Animal {char name[128];int age;int sex;int others;void (*peat)();void (*pbeat)();void (*test)(); };void dogEat() {printf(狗吃屎\n); } void catEat() {printf(猫吃鱼\n); } void personEat() {printf(人吃米\n); } / void dogBeat() {printf(狗咬你\n); } void catBeat() {printf(猫咬你\n); } void personBeat() {printf(人打你\n); } int main() {struct Animal dog {.peat dogEat,.pbeat dogBeat,};struct Animal cat {.peat catEat,.pbeat catBeat,};struct Animal person {.peat personEat,.pbeat personBeat,};dog.peat();cat.peat();person.peat();dog.pbeat();cat.pbeat();person.pbeat();return 0; } 工厂模式之后 自行分开成一个个子文件 #include stdio.h// 定义动物结构体 struct Animal {char name[128];int age;int sex;int others;void (*eat)();void (*beat)(); };// 定义不同类型的吃函数 void dogEat() {printf(狗吃屎\n); }void catEat() {printf(猫吃鱼\n); }void personEat() {printf(人吃米\n); }// 定义不同类型的打函数 void dogBeat() {printf(狗咬你\n); }void catBeat() {printf(猫咬你\n); }void personBeat() {printf(人打你\n); }// 创建动物工厂函数 struct Animal createAnimal(void (*eatFunc)(), void (*beatFunc)()) {struct Animal animal;animal.eat eatFunc;animal.beat beatFunc;return animal; }int main() {// 使用工厂函数创建不同类型的动物对象struct Animal dog createAnimal(dogEat, dogBeat);struct Animal cat createAnimal(catEat, catBeat);struct Animal person createAnimal(personEat, personBeat);// 调用动物对象的方法dog.eat();cat.eat();person.eat();dog.beat();cat.beat();person.beat();return 0; }在上面的代码中我们创建了一个createAnimal函数它接受两个函数指针作为参数并返回一个初始化好的动物对象。然后在main函数中我们使用createAnimal函数来创建不同类型的动物对象然后调用它们的吃和打方法。这样就实现了工厂模式使得创建和使用不同类型的动物对象更加灵活和可维护。 如何理解这个模式的关键点 抽象对象类型在代码中抽象对象类型是struct Animal它定义了动物对象的通用属性和行为。这个抽象类型充当了工厂模式中的产品。 具体对象类型不同种类的动物狗、猫、人被表示为具体对象类型每个具体对象类型都有不同的实现包括吃和打两个行为。这些具体对象类型充当了工厂模式中的具体产品。 工厂函数createAnimal函数是工厂函数它接受不同的参数吃和打的函数指针来创建不同类型的动物对象。这个工厂函数充当了工厂模式中的工厂它负责创建具体产品。 客户端代码在main函数中客户端代码使用工厂函数来创建不同类型的动物对象而不需要知道如何构造这些对象的细节。客户端只关心如何使用这些对象而不关心它们的创建过程。 用链表写法太麻烦也发出来吧。 #include stdio.h #include string.h #include stdlib.h// 定义动物结构体 struct Animal {char name[128]; // 动物的名字void (*peat)(); // 吃的行为函数指针void (*pbeat)(); // 攻击的行为函数指针struct Animal *next; // 指向下一个动物的指针 };// dog void dogEat() {printf(狗吃屎\n); } void dogBeat() {printf(狗咬你\n); } struct Animal dog {.name Pike,.peat dogEat,.pbeat dogBeat,.next NULL };// cat void catEat() {printf(猫吃鱼\n); } void catBeat() {printf(猫咬你\n); } struct Animal cat {.name Tom,.peat catEat,.pbeat catBeat,.next NULL };// person void personEat() {printf(人吃米\n); } void personBeat() {printf(人打你\n); } struct Animal person {.name Lihua,.peat personEat,.pbeat personBeat,.next NULL };// 向链表中添加动物 struct Animal *putAnimal(struct Animal *phead, struct Animal *animal) {if (phead NULL){phead animal;}else{animal-next phead;phead animal;}return phead; }// 根据名字查找动物 struct Animal *findName(char *str, struct Animal *phead) {struct Animal *tmp phead;if (phead NULL){return NULL;}else{while (tmp ! NULL){if (strcmp(tmp-name, str) 0){return tmp;}tmp tmp-next;}}return NULL; }int main() {char buf[128] {\0};struct Animal *phead NULL;struct Animal *ptmp;// 向链表中添加动物phead putAnimal(phead, dog);phead putAnimal(phead, cat);phead putAnimal(phead, person);while (1){printf(请输入Pike、Tom、Lihua\n);scanf(%s, buf);struct Animal *ptmp findName(buf, phead);if (ptmp ! NULL){printf(姓名%s\n, ptmp-name);ptmp-peat();ptmp-pbeat();}memset(buf, \0, sizeof(buf));}return 0; }
http://www.w-s-a.com/news/940531/

相关文章:

  • 专做耐克阿迪鞋网站免费微信网站模板下载
  • 视频在线制作网站wordpress怎么调用友情链接
  • 做微商什么是官方网站温州阀门外贸网站建设
  • 申请主机网站网站建设平台合同模板
  • 如何做ps4的游戏视频网站海口网红图书馆
  • 福建住房和城乡建设局网站做私人小网站赚钱吗
  • 物流的网站模板wordpress网站 800cdn
  • 建站公司合肥做精品课程网站需要啥素材
  • 成都三合一网站建设网站建设教程自学网
  • 门户网站跳出率wordpress火车头采集教程
  • 天津做网站的网络公司wordpress免费的模板
  • 有哪些关于校园内网站建设的法律如何申请免费网站空间
  • 玉溪市网站建设龙口网页定制
  • 网站开发都用什么软件上海景观设计公司10强
  • 网站建设氵金手指下拉十二深圳网站建设售后服务
  • 上海网站设计价青海企业网站制作
  • 静态网站做新闻系统深圳外贸网站建设哪家好
  • 网站如何做词360免费wifi老是掉线怎么办
  • 网站建设分金手指排名十八iis10 wordpress
  • 成都网站优化公司哪家好网站建设帮助中心
  • 做外单什么网站好佛山市建设企业网站服务机构
  • 哪些网站是单页面应用程序北京门头沟山洪暴发
  • 织梦(dedecms)怎么修改后台网站默认"织梦内容管理系统"标题关键词优化收费标准
  • 网站设计和备案企业官网网站建设免费
  • 公司概况-环保公司网站模板搜索引擎营销的基本流程
  • 门户网站建设经验天津市建设银行租房网站
  • 百度推广 帮做网站吗怎样修改网站的主页内容
  • 网站怎么做dns解析公司官网改版方案
  • 湛江市住房和城乡建设局网站杭州网站公司哪家服务好
  • 设计网站公司湖南岚鸿设计镜像的网站怎么做排名