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

网上做室内设计的网站陈铭生小说

网上做室内设计的网站,陈铭生小说,如何建立自己的网络销售,摄影师都在哪些网站发布作品介绍 提供了一个创建一系列相关或相互依赖的对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。 在抽象工厂模式中,每个具体工厂都提供了多个工厂方法用于产生多种不同类型的产品,这些产品构…

介绍

        提供了一个创建一系列相关或相互依赖的对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。

        在抽象工厂模式中,每个具体工厂都提供了多个工厂方法用于产生多种不同类型的产品,这些产品构成了一个产品族。

实现

myclass.h

//
// Created by yuwp on 2024/1/12.
//#ifndef DESIGNPATTERNS_MYCLASS_H
#define DESIGNPATTERNS_MYCLASS_H#include <iostream>class AbstractProductA {};class AbstractProductB {};class ConcreteProductA : public AbstractProductA {
public:ConcreteProductA();
};class ConcreteProductB : public AbstractProductB {
public:ConcreteProductB();
};class AbstractFactory {
public:virtual AbstractProductA *createProductA() = 0;virtual AbstractProductB *createProductB() = 0;
};class ConcreteFactory1 : public AbstractFactory {
public:AbstractProductA *createProductA() override;AbstractProductB *createProductB() override;
};#endif //DESIGNPATTERNS_MYCLASS_H

myclass.cpp

//
// Created by yuwp on 2024/1/12.
//#include "myclass.h"#include "myclass.h"ConcreteProductA::ConcreteProductA() {std::cout << "产品A" << std::endl;
}ConcreteProductB::ConcreteProductB() {std::cout << "产品B" << std::endl;
}AbstractProductA* ConcreteFactory1::createProductA() {std::cout << "工厂1生产了: ";return new ConcreteProductA();
}AbstractProductB* ConcreteFactory1::createProductB() {std::cout << "工厂1生产了: ";return new ConcreteProductB();
}

main.cpp

#include <iostream>
#include <mutex>
#include "myclass.h"int main() {AbstractFactory *factory = new ConcreteFactory1();auto a = factory->createProductA();auto b = factory->createProductB();delete factory;delete a;delete b;return 0;
}

总结

        优点:

        1. 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易,所有的具体工厂都实现了在抽象工厂中声明的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。

        2. 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。

        3. 增加新的产品族很方便,无须修改已有系统,符合开闭原则。

        缺点:

        1. 增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了开闭原则。

        使用场景:

        1. 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有类型的工厂模式都是很重要的,用户无须关心对象的创建过程,将对象的创建和使用解耦。

        2. 系统中有多于一个的产品族,而每次只使用其中某一个产品族。可以通过配置文件等方式来使得用户可以动态改变产品族,也可以很方便地增加新的产品族。

        3. 属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来。同一个产品族中的产品可以是没有任何关系的对象,但是它们都具有一些共同的约束。例如同一操作系统下的按钮和文本框,按钮与文本框之间没有直接关系,但它们都是属于某一操作系统的,此时具有一个共同的约束条件:操作系统的类型。

        4. 产品等级结构稳定,设计完成之后,不会向系统中增加新的产品等级结构或者删除已有的产品等级结构。

练习

myclass.h

//
// Created by yuwp on 2024/1/12.
//#ifndef DESIGNPATTERNS_MYCLASS_H
#define DESIGNPATTERNS_MYCLASS_H#include <iostream>class Controller {  // 抽象产品};class AndroidOperationController : public Controller { // 具体产品
public:AndroidOperationController();
};class AndroidInterfaceController : public Controller { // 具体产品
public:AndroidInterfaceController();
};class IOSOperationController : public Controller { // 具体产品
public:IOSOperationController();
};class IOSInterfaceController : public Controller { // 具体产品
public:IOSInterfaceController();
};class ControllerFactory { // 抽象工厂
public:virtual Controller *createOperation() = 0;virtual Controller *createInterface() = 0;
};class AndroidControllerFactory : public ControllerFactory {
public:Controller *createOperation() override;Controller *createInterface() override;
};class IOSControllerFactory : public ControllerFactory {
public:Controller *createOperation() override;Controller *createInterface() override;
};#endif //DESIGNPATTERNS_MYCLASS_H

myclass.cpp

//
// Created by yuwp on 2024/1/12.
//#include "myclass.h"#include "myclass.h"AndroidOperationController::AndroidOperationController() {std::cout << "Android系统游戏操作控制" << std::endl;
}AndroidInterfaceController::AndroidInterfaceController() {std::cout << "Android系统游戏界面控制" << std::endl;
}IOSOperationController::IOSOperationController() {std::cout << "ios系统游戏操作控制" << std::endl;
}IOSInterfaceController::IOSInterfaceController() {std::cout << "ios系统游戏界面控制" << std::endl;
}Controller* AndroidControllerFactory::createOperation() {return new AndroidOperationController();
}Controller* AndroidControllerFactory::createInterface() {return new AndroidInterfaceController();
}Controller* IOSControllerFactory::createOperation() {return new IOSOperationController();
}Controller* IOSControllerFactory::createInterface() {return new IOSInterfaceController();
}

main.cpp

#include <iostream>
#include <mutex>
#include "myclass.h"int main() {ControllerFactory *factory;Controller *op, *in;factory = new AndroidControllerFactory();op = factory->createOperation();in = factory->createInterface();delete factory;delete op;delete in;factory = new IOSControllerFactory();op = factory->createOperation();in = factory->createInterface();delete factory;delete op;delete in;return 0;
}

http://www.yayakq.cn/news/291180/

相关文章:

  • 寿光营销型网站建设莱芜职业技术学院
  • 安装建设手机银行移动门户网站flash网站大全
  • 个人网站有哪些网站有网站如何做淘宝客
  • 建设电子商务网站的方法有?嘉定广州网站建设
  • 浙江大学陈越做的刷题网站自已建个人网站
  • 青岛城阳 软件网站开发国家企业信用公示信息年报官网
  • 网站表单及商品列表详情模板电脑编程网站
  • 2022网站快速收录技术做网站常用的背景图像
  • 网站的建设方法包括什么问题工程建设标准网官方网站
  • 什么网站做外贸好it类网站
  • 有没有免费网站建设大气dede织梦企业广告网络公司工作室网站模板源码
  • 营销型网站如何策划怎么建设一个漫画网站
  • 引用网站的内容如何做注释中国建设银行官网站账户商品
  • 在线教育网站开发实例企业门户网站建设方案怎么写
  • 学校网站开发公众号注册官网
  • 简洁页面心情网站室内设计公司理念
  • 购物网站需求分析php+网站开发+pdf
  • 通化网站建设单位WordPress修改模板相对路径
  • 网站建设技能考网站空间 windows linux
  • 温州网络公司推广seo网站编辑是做什么的
  • 垂直型网站名词解释wordpress加载jquery库
  • 网站建设亻金手指科杰jsp和php哪个做网站快
  • 门业网站模板下载html的制作网站的优点
  • 网站备案背景幕布是什么网站开发z亿玛酷1专注
  • 怎样给网站做优化crm系统永久免费
  • 莱特币做空网站wordpress设置关站
  • 南京网站设计机构网络营销与传统营销的关系
  • 南沙网站建设wordpress 移植
  • 权威的手机排行榜网站搭建网页聊天室
  • 免费的黄冈网站有哪些平台可以用微信支付猪八戒兼职网