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

满城网站建设wordpress适合国人的编辑器

满城网站建设,wordpress适合国人的编辑器,基于php技术的小型企业网站开发,wordpress网页走丢了工厂模式介绍 通过一个加工厂#xff0c;在这个工厂中添加对应材料#xff0c;我们就可以得到想要的东西#xff0c;在程序设计中#xff0c;这种模式就叫做工厂模式#xff0c;工厂生成出的产品就是某个类的实例#xff0c;也就是对象。 关于工厂模式一共有三种#…工厂模式介绍 通过一个加工厂在这个工厂中添加对应材料我们就可以得到想要的东西在程序设计中这种模式就叫做工厂模式工厂生成出的产品就是某个类的实例也就是对象。 关于工厂模式一共有三种分别是简单工厂模式、工厂模式、抽象工厂模式。 简单工厂模式 比如说你要生产一些物品生产的方法都是一样的只是原材料不同。你可以设计一个基类提供生产方法。然后将要生产的对象材料加入到生产类中即可。后面可以再定义一个对象工厂类用来创建对应材料。 创建一个新的类, 可以将这个类称之为工厂类。对于简单工厂模式来说需要的工厂类只有一个。工厂类中添加一个公共的成员函数通过这个函数来创建我们需要的对象通过这个对象调用工厂函数这样就可以生产出一个指定类型的实例对象了。这里可以使用c中的多态来完成。 例如先定义一个基类将其方法定义为虚函数。 class Product { public:Product(){;}virtual void produce(){cout 进行生产 endl;}virtual ~Product(){cout 资源释放 endl;} }; 定义要实例化的对象 class Milk :public Product { public:void produce(){cout 生产了牛奶 endl;}~Milk(){cout delete Milk endl;} };class Apple :public Product { public:void product(){cout 生产了apple endl;}~Apple(){cout delete apple endl;} }; 定义物品工厂类用来生产对应材料 enum class Type :char { milk,apple }; class Factory { public:Product* p nullptr;Product* create(Type T){switch (T){case Type::milk:p new Milk;break;case Type::apple:p new Apple;break;default:break;}return p;} }; int main() {Factory* f new Factory;Product* p f-create(Type::milk);//需要生产材料就对其参数进行修改p-produce();delete p;return 0; } 工厂类模式 如果要可以生成更多种类的物品需要添加更多的物品对象同时还要在工厂函数的switch语句中添加更多的case很明显这违背了封闭原则。 简单工厂模式是只有一个工厂类而工厂模式是有很多的工厂类。 一个基类包含一个虚工厂函数用于实现多态。多个子类重写父类的工厂函数。每个子工厂类负责生产某种物品这相当于再次解耦如果要生产新物品那么只需要添加对应的工厂类无需修改原有的代码。 代码 class Product { public:virtual void produce(){cout 进行生产 endl;}virtual ~Product(){cout 资源释放 endl;} };class Milkpro :public Product { public:void produce(){cout 生产了牛奶 endl;}~Milkpro(){cout delete Milk endl;} };class Applepro :public Product { public:void product(){cout 生产了apple endl;}~Applepro(){cout delete apple endl;} };class Factory//并没有在这个类中直接生产材料而是定义为抽象类 { public:virtual Product* creat() 0;virtual ~Factory(){;} };class Milk :public Factory { public:Product* creat(){return new Milkpro;}~Milk(){cout delete Milk endl;} }; class Apple :public Factory { public:Product* creat(){return new Applepro;}~Apple(){cout delete Apple endl;} }; int main() {Factory* f new Milk;Product* p f-creat();p-produce();delete p;return 0; } 抽象工厂类 假如要生产一艘船该船的组成为 船体船的动力系统船中配备的武器。 船体的选择木材 合金 动力系统的选择人力驱动核反应驱动 武器的选择枪自动机关炮 这样一共就有8种选则。 船体因为船体材料的这个属性是可变的所以还需要给它提供一个抽象类在这个抽象类的子类中就可以去更换不同的船体材料。 class ShipBody { public:virtual string getShipBody() 0;virtual ~ShipBody() {} };class WoodBody : public ShipBody { public:string getShipBody() override{return string(用木材制作轮船船体...);} };class MetalBody : public ShipBody { public:string getShipBody() override{return string(用合金制作轮船船体...);} }; 动力系统与武器也是一样 // 动力 class Engine { public:virtual string getEngine() 0;virtual ~Engine() {} };class Human : public Engine { public:string getEngine() override{return string(使用人力驱动...);} }; class Nuclear : public Engine { public:string getEngine() override{return string(使用核能驱动...);} };// 武器 class Weapon { public:virtual string getWeapon() 0;virtual ~Weapon() {} };class Gun : public Weapon { public:string getWeapon() override{return string(配备的武器是枪);} };class Cannon : public Weapon { public:string getWeapon() override{return string(配备的武器是自动机关炮);} }; 一首船需要3个组成部分这里用3个变量来表示 class Ship { public:Ship(ShipBody* body, Weapon* weapon, Engine* engine) :m_body(body), m_weapon(weapon), m_engine(engine){}string getProperty(){ // 这也是多态实现获取对应船组成部分的材料string info m_body-getShipBody() m_weapon-getWeapon() m_engine-getEngine();return info;}~Ship(){delete m_body;delete m_engine;delete m_weapon;} private:ShipBody* m_body nullptr;Weapon* m_weapon nullptr;Engine* m_engine nullptr; }; 工厂类与上面一样不直接进行提供船部件而是定义为抽象类让子类去提供船的部件。 / 工厂类 class AbstractFactory { public:virtual Ship* createShip() 0;virtual ~AbstractFactory() {} };class BasicFactory : public AbstractFactory//定义木头枪人力的船 { public:Ship* createShip() override{Ship* ship new Ship(new WoodBody, new Gun, new Human);cout 基础型战船生产完毕, 可以下水啦... endl;return ship;} };结果 int main() {AbstractFactory* factroy new BasicFactory;Ship* ship factroy-createShip();cout ship-getProperty();delete ship;delete factroy;return 0; }对比 简单工厂模式不能遵守开放-封闭原则该工厂类没有设置为抽象类要在该类中直接添加生产对象。工厂模式创建的对象  对应的类不需要提供抽象类需要创建什么对象直接提供对应的子类抽象工厂模式创建的对象  对应的类有抽象的基类创建的对象有多种不同的组合方法。 观察者模式 一个简单的例子交叉路口的红绿灯。过往的车辆就是观察者或则是订阅者信号灯就是消息的发布者。当车辆到了该路口车辆就会观测路灯当路灯为红灯时车辆即可通行。当车辆远离该路口时车辆就不需要观察路灯的信号了。 其他例子购买的商品被送到菜鸟驿站会收到驿站发送的提示信息。 这里以报刊为例报刊可以发布多种类型的消息给不同的人。 发布者需要满足以下的需求 添加订阅者将所有的订阅者存储起来删除订阅者将其从订阅者列表中删除将消息发送给订阅者发通知 发布者 发布者未必是一种类型的不同的发布者可以发布不同种类的消息。先创建出一个发布者的抽象类。 class Observer;//订阅者抽象类 class NewsAgency//发布者抽象类 { public:     void attach(Observer* ob)     {         m_list.push_back(ob);//增加订阅者     }     void deatch(Observer* ob     {        m_list.remove(ob);//删除订阅者     }     virtual void notify(string msg) 0;//通知     virtual ~NewsAgency() {}; protected:     listObserver* m_list;   // 订阅者列表 }; class News_A :public NewsAgency { public:     void notify(string msg) override     {         cout 这是NewA新闻报刊 endl;         for (auto ch : m_list)         {             ch-update(msg);         }     } }; class News_B :public NewsAgency { public:     void notify(string msg) override     {         cout 这是NewB新闻报刊 endl;         for (auto ch : m_list)         {             ch-update(msg);         }     } }; 订阅者 观察者也未必只是一种对象给所有的观察者定义一个抽象的基类。 // 抽象的订阅者类 class Observer { public:   //通过构造函数给观察者类提供一个信息的发布者      Observer(string name, NewsAgency* news) :m_name(name), m_news(news)      {         m_news-attach(this);//发布者对象将观察者对象存储了起来可以收到发布的消息     }     void unsubscribe()     {         m_news-deatch(this);//订阅者取消订阅     }     virtual void update(string msg) 0;     virtual ~Observer() {} protected:     string m_name;     NewsAgency* m_news; }; class Observer_A : public Observer//订阅者A { public:     using Observer::Observer;     void update(string msg) override     {         cout 订阅者A收到新消息 msg endl;     } }; class Observer_B : public Observer//订阅者B { public:     using Observer::Observer;     void update(string msg) override     {         cout 订阅者B收到新消息 msg endl;     } }; 过程 int main() {News_A* New_a new News_A;News_B* New_b new News_B;Observer_A* obser_a new Observer_A(observer_A,New_a);Observer_B* obser_b new Observer_B(observer_B,New_b);New_a-notify(明天会下雨哦*************);New_b-notify(明天广场会进行发布会活动请大家参加);return 0; }
http://icebutterfly214.com/news/38638/

相关文章:

  • 物理模型的图像去雾算法MATLAB实现
  • DDR4仿真之仿真环境搭建(二)
  • RAG项目实战:基于图文PDF的多模态问答RAG项目(一)调研阶段
  • 2025年知名的Lanny阀组比例阀厂家推荐及选购指南
  • 2025年靠谱的滋润护手霜厂家最新TOP排行榜
  • 2025年口碑好的八头激光切割机厂家推荐及采购指南
  • 2025年11月性价比高的学习机品牌推荐:权威对比排行榜及质量可靠性指南
  • 2025年11月智能语音机器人品牌评测榜:Voicefox与四款竞品全维度对比
  • 鸿蒙应用开发之Git版本控制
  • 2025年11月昆明泌尿医院排名榜:五家机构深度评测与选择指南
  • 当下国内商标知识产权咨询专业推荐
  • 使用CDN后如何更新同名文件
  • dspy
  • 2025年比较好的酒类纸箱包装厂家推荐及选购指南
  • TOMCAT Docker 容器化部署指南
  • Windows 11 系统对磁盘进行分区保姆级教程
  • 2025年靠谱的螺旋风管厂家最新权威推荐排行榜
  • 2025年糖果上浆机厂商口碑推荐榜单
  • 很多人问:我能做独立开发吗?
  • 详细介绍:Kafka 面试题及详细答案100道(36-50)-- 生产者与消费者
  • 2025年11月工程管理软件推荐榜单:斗栱云领衔五强对比评测
  • 2025年低频变压器供应商口碑排行榜单
  • 2025年知小有平台深度解析:副业创收生态的闭环逻辑与风险边界
  • 2025年镀锌钢格栅定制厂家口碑排行
  • 2025年揭秘自游界公司:生成式AI流量生态创收模式全景解析
  • 2025年自游界公司:深度解析AI流量生态赋能个体创收模式
  • 2025年节能速冻冷库品牌口碑排行榜单
  • 2025年防爆管道风机定制厂家口碑推荐
  • 2025年靠谱的耐磨安全绳实力厂家TOP推荐榜
  • 2025年比较好的橱柜上翻门高评价厂家推荐榜