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

如何查询网站所有人深圳网站优化咨询

如何查询网站所有人,深圳网站优化咨询,国内seo服务商,建设自己网站的流程一、介绍 1.动机 在软件系统中#xff0c;经常面临着创建对象的工作#xff0c;这些对象有可能是一系列相互依赖的对象#xff1b;由于需求的变化#xff0c;需要创建的对象的具体类型经常变化#xff0c;同时也可能会有更多系列的对象需要被创建。 如何应对这种变化经常面临着创建对象的工作这些对象有可能是一系列相互依赖的对象由于需求的变化需要创建的对象的具体类型经常变化同时也可能会有更多系列的对象需要被创建。 如何应对这种变化如何绕过常规的对象创建方法(new)提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合 2.定义 工厂方法模式定义一个用于创建对象的接口让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。——GOF 抽象工厂模式提供一个接口让该接口负责创建一系列“相关或者相互依赖的对象”无需指定它们具体的类。——GOF 3.结构图 工厂方法模式 抽象工厂模式 4.要点总结 工厂方法模式 Factory Method模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型紧耦合关系(new)会导致软件的脆弱。Factory Method模式通过面向对象的手法将创建具体对象的工作延迟到子类从而实现一种扩展(而非更改)的策略较好地解决了这种紧耦合关系。Factory Method模式解决“单个对象”的需求变化缺点在于要求创建方法/参数相同。 抽象工厂模式 如果没有应对“多系列对象构建”的需求变化则没有必要使用Abstract Factory模式这时候使用简单的工厂完全可以。“系列对象”指的是在某一特定系列下的对象之间有相互依赖或相互作用的关系不同系列的对象之间不能相互依赖。Abstract Factory模式主要在于应对“新系列”的需求变动其缺点在于难以应对“新对象”的需求变动。 二、工厂模式 1.概念 工厂模式避免直接使用new运算符来创建产品对象它提供一个抽象的工厂接口来创建和管理对象的实例化同时也支持对创建逻辑的封装和扩展。 ①工厂模式的优点 解耦客户端代码与具体产品的创建逻辑分离只依赖于抽象产品和工厂接口。扩展性增加新产品时只需添加新的具体产品类和相应的具体工厂类不需要修改现有代码。重用性同一个工厂类可以用来创建多个产品提高代码的复用率。 ②工厂模式的缺点 增加类的数量可能导致系统中类的数量增加尤其是在使用抽象工厂模式时。复杂性引入额外的抽象层可能会增加理解和维护的复杂性。 2.实现要点 抽象产品定义一个抽象产品类它将作为具体产品的共同基类或接口。具体产品为每个具体的产品实现一个类这些类将继承或实现抽象产品类。抽象工厂创建一个抽象工厂类它将提供创建产品的接口。具体工厂实现抽象工厂中定义的方法创建具体的产品对象。客户端使用工厂方法来创建对象但不需要知道具体产品的类。 工厂模式可以分为三种类型简单工厂模式、工厂方法模式及抽象工厂模式。 3.简单工厂模式 通过一个工厂类来创建不同类型的产品实例根据传递的参数来决定创建哪种具体的产品。 //文具类抽象产品 class Stationery { public:virtual void use() 0;virtual ~Stationery() {} };//钢笔类具体产品 class Pen :public Stationery { public:Pen() {cout Pen() endl;}virtual ~Pen() {cout ~Pen() endl;}virtual void use() override{cout Use pen. endl;} };//铅笔类具体产品 class Pencil :public Stationery { public:Pencil() {cout Pencil() endl;}virtual ~Pencil() {cout ~Pencil() endl;}virtual void use() override {cout Use pencil. endl;} };//枚举类型 enum StationeryType {PEN,PENCIL };//文具工厂类 class StationeryFactory { public:static shared_ptrStationery createStationery(StationeryType type) {switch (type) {case PENCIL:return shared_ptrStationery(new Pencil);break;case PEN:return shared_ptrStationery(new Pen);break;defalut:return nullptr;break;}} }; 测试代码 shared_ptrStationery pen StationeryFactory::createStationery(PEN); pen-use(); shared_ptrStationery pencil StationeryFactory::createStationery(PENCIL); pencil-use(); 输出结果 Pen() Use pen. Pencil() Use pencil. ~Pencil() ~Pen() 4.工厂方法模式 将创建具体产品的任务分发给具体的产品工厂每个具体工厂负责创建对应的具体产品对象。 //交通工具类抽象类 class Vehicle { public:virtual void run() 0;virtual ~Vehicle() {} };//汽车类具体类 class Car :public Vehicle { public:virtual void run() override {cout The car is running. endl;} };//自行车类具体类 class Bicycle :public Vehicle { public:virtual void run() override {cout The bicycle is moving. endl;} };//交通工具工厂抽象工厂 class VehicleFactory { public:virtual Vehicle* createVehicle() 0;virtual ~VehicleFactory() {} };//汽车工厂具体工厂 class CarFactory :public VehicleFactory { public:virtual Vehicle* createVehicle() override {return new Car();} };//自行车工厂具体工厂 class BicycleFactory :public VehicleFactory { public:virtual Vehicle* createVehicle() override {return new Bicycle();} }; 测试代码  VehicleFactory* carFactory new CarFactory(); Vehicle* car carFactory-createVehicle(); car-run(); delete car; delete carFactory;VehicleFactory* bicycleFactory new BicycleFactory(); Vehicle* bicycle bicycleFactory-createVehicle(); bicycle-run(); delete bicycle; delete bicycleFactory; 输出结果  The car is running. The bicycle is moving. 5.抽象工厂模式 提供一个抽象的工厂接口以及多个具体工厂类每个具体工厂类负责创建一种或多种产品。 //桌子类抽象类 class Table { public:virtual void display() 0;virtual ~Table() {} };//现代风格桌子具体类 class ModernTable :public Table { public:virtual void display() override {cout A modern style table. endl;} };//古典风格桌子具体类 class ClassicalTable :public Table { public:virtual void display() override {cout A classical style table. endl;} };//椅子类抽象类 class Chair { public:virtual void sit() 0;virtual ~Chair() {} };//现代风格椅子具体类 class ModernChair :public Chair { public:virtual void sit() override {cout Sitting on modern style chair. endl;} };//古典风格椅子具体类 class ClassicalChair :public Chair { public:virtual void sit() override {cout Sitting on classical style chair. endl;} };//沙发类抽象类 class Sofa { public:virtual void relax() 0;virtual ~Sofa() {} };//现代风格沙发具体类 class ModernSofa :public Sofa { public:virtual void relax() override {cout Relaxing on modern style sofa. endl;} };//古典风格沙发具体类 class ClassicalSofa :public Sofa { public:virtual void relax() override {cout Relaxing on Classical style sofa. endl;} };//家具工厂抽象工厂 class FurnitureFactory { public:virtual Table* createTable() 0;virtual Chair* createChair() 0;virtual Sofa* createSofa() 0;virtual ~FurnitureFactory() {} };//现代风格家具工厂具体工厂 class ModernFurnitureFactory :public FurnitureFactory { public:virtual Table* createTable() override {return new ModernTable;}virtual Chair* createChair() override {return new ModernChair;}virtual Sofa* createSofa() override {return new ModernSofa;} };//古典风格家具工厂具体工厂 class ClassicalFurnitureFactory :public FurnitureFactory { public:virtual Table* createTable() override {return new ClassicalTable;}virtual Chair* createChair() override {return new ClassicalChair;}virtual Sofa* createSofa() override {return new ClassicalSofa;} }; 测试代码  FurnitureFactory* modernFactory new ModernFurnitureFactory(); Table* modernTable modernFactory-createTable(); Chair* modernChair modernFactory-createChair(); Sofa* modernSofa modernFactory-createSofa(); modernTable-display(); modernChair-sit(); modernSofa-relax(); delete modernTable; delete modernChair; delete modernSofa;FurnitureFactory* classicalFactory new ClassicalFurnitureFactory(); Table* classicalTable new ClassicalTable(); Chair* classicalChair new ClassicalChair(); Sofa* classicalSofa new ClassicalSofa(); classicalTable-display(); classicalChair-sit(); classicalSofa-relax(); delete classicalTable; delete classicalChair; delete classicalSofa; 输出结果 A modern style table. Sitting on modern style chair. Relaxing on modern style sofa. A classical style table. Sitting on classical style chair. Relaxing on Classical style sofa.
http://www.dnsts.com.cn/news/8509.html

相关文章:

  • seo关键词优化软件官网邵阳seo
  • 网站建设实训意见网站维护北京
  • 做网站内容需要自己填的虚拟主机安装宝塔面板
  • 现在什么视频网站做的最好seo竞价推广
  • 无忧网站潍坊免费做网站
  • 网站建设贵阳免费的会员卡管理软件
  • wordpress多本小说站出售哪个网站做图书广告好
  • 门户网站的建设成果重庆哪家网站
  • 蚂蜂窝网站源码织梦医疗网站
  • crm系统网站开发直播app多少钱
  • 哪个网站有介绍拿到家做的手工活跟知乎一样的网站
  • 玉溪网站开发公司网站的查询功能是怎样做的
  • wordpress能做分类信息网站中国建设银行网站 个人
  • 厦门网站搭建长沙网络推广外包
  • 做国外销售都上什么网站网站策划运营方案
  • 服务器网站80端口打不开网站布局有哪些
  • 桂林出网站英文网站如何建设
  • 东莞 网站 建设 物流wordpress 回到首页
  • 网站设计师是什么专业南通高端网站建设
  • phpcms手机网站模板上海网站公
  • 深圳网站建设公司联广州本地生活app
  • 哪里有找工作的网站高校档案网站建设的目的是什么
  • 古典lash网站带后台源码下载天津seo推广软件
  • 给素材网站做素材方法企业网站的建设哪家比较好
  • 建设工程施工合同范本最新版网站优化公司价格如何计算
  • 河东做网站公司wordpress支付界面出现500
  • 揭阳建设网站程序员给别人做的网站违法
  • 兰州西固区网站建设平台wordpress导航菜单动画
  • 做网站是怎么挣钱的网络营销的4p策略
  • 樟木头仿做网站商城开发分销系统