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

使用网站模板快速建站百度大数据中心

使用网站模板快速建站,百度大数据中心,邯郸市网站建设多少钱,如何做网站外部链接抽象工厂模式 (Abstract Factory) 抽象工厂模式 是一种创建型设计模式,提供一个接口,用于创建一组相关或互相依赖的对象,而无需指定它们的具体类。 意图 提供一个创建一组相关对象的接口,而无需指定它们的具体类。解决产品对象之…

抽象工厂模式 (Abstract Factory)

抽象工厂模式 是一种创建型设计模式,提供一个接口,用于创建一组相关或互相依赖的对象,而无需指定它们的具体类。


意图

  • 提供一个创建一组相关对象的接口,而无需指定它们的具体类。
  • 解决产品对象之间的相互依赖问题,使得一组对象能协同工作。

使用场景

  1. 需要创建一组相关对象
    • 如 GUI 程序中,窗口、按钮、菜单等需要统一的外观风格。
  2. 需要保证对象之间的兼容性
    • 如游戏开发中,不同种族的士兵和建筑需要互相匹配。
  3. 需要隐藏具体实现
    • 客户端代码只依赖于产品接口,具体实现被封装。

参与者角色

  1. 抽象工厂 (Abstract Factory)
    • 声明一组用于创建相关对象的接口。
  2. 具体工厂 (Concrete Factory)
    • 实现抽象工厂的接口,创建具体的产品。
  3. 抽象产品 (Abstract Product)
    • 定义所有产品的公共接口。
  4. 具体产品 (Concrete Product)
    • 实现抽象产品的接口,为具体工厂生产的对象。

示例代码

以下示例展示了如何使用抽象工厂模式为不同操作系统创建相关的 GUI 组件(按钮和窗口)。

#include <iostream>
#include <memory>// 抽象产品 A: 按钮
class Button {
public:virtual void render() const = 0;virtual ~Button() {}
};// 具体产品 A1: Windows 按钮
class WindowsButton : public Button {
public:void render() const override {std::cout << "Rendering Windows Button" << std::endl;}
};// 具体产品 A2: Mac 按钮
class MacButton : public Button {
public:void render() const override {std::cout << "Rendering Mac Button" << std::endl;}
};// 抽象产品 B: 窗口
class Window {
public:virtual void render() const = 0;virtual ~Window() {}
};// 具体产品 B1: Windows 窗口
class WindowsWindow : public Window {
public:void render() const override {std::cout << "Rendering Windows Window" << std::endl;}
};// 具体产品 B2: Mac 窗口
class MacWindow : public Window {
public:void render() const override {std::cout << "Rendering Mac Window" << std::endl;}
};// 抽象工厂
class GUIFactory {
public:virtual std::unique_ptr<Button> createButton() const = 0;virtual std::unique_ptr<Window> createWindow() const = 0;virtual ~GUIFactory() {}
};// 具体工厂 1: Windows 工厂
class WindowsFactory : public GUIFactory {
public:std::unique_ptr<Button> createButton() const override {return std::make_unique<WindowsButton>();}std::unique_ptr<Window> createWindow() const override {return std::make_unique<WindowsWindow>();}
};// 具体工厂 2: Mac 工厂
class MacFactory : public GUIFactory {
public:std::unique_ptr<Button> createButton() const override {return std::make_unique<MacButton>();}std::unique_ptr<Window> createWindow() const override {return std::make_unique<MacWindow>();}
};// 主函数
int main() {// 选择具体工厂std::unique_ptr<GUIFactory> factory = std::make_unique<WindowsFactory>();// 使用工厂创建产品auto button = factory->createButton();auto window = factory->createWindow();button->render(); // 输出:Rendering Windows Buttonwindow->render(); // 输出:Rendering Windows Window// 切换到另一种具体工厂factory = std::make_unique<MacFactory>();button = factory->createButton();window = factory->createWindow();button->render(); // 输出:Rendering Mac Buttonwindow->render(); // 输出:Rendering Mac Windowreturn 0;
}

代码解析

1. 抽象产品类

定义了产品的公共接口,确保产品类型的一致性:

class Button {
public:virtual void render() const = 0;virtual ~Button() {}
};

2. 具体产品类

实现了抽象产品接口,并提供具体功能:

class WindowsButton : public Button {
public:void render() const override {std::cout << "Rendering Windows Button" << std::endl;}
};

3. 抽象工厂

定义了创建一组相关产品的接口:

class GUIFactory {
public:virtual std::unique_ptr<Button> createButton() const = 0;virtual std::unique_ptr<Window> createWindow() const = 0;virtual ~GUIFactory() {}
};

4. 具体工厂

实现了抽象工厂接口,负责生产具体的产品:

class WindowsFactory : public GUIFactory {
public:std::unique_ptr<Button> createButton() const override {return std::make_unique<WindowsButton>();}std::unique_ptr<Window> createWindow() const override {return std::make_unique<WindowsWindow>();}
};

5. 主函数

客户端代码通过工厂接口创建产品,无需知道具体产品的实现:

std::unique_ptr<GUIFactory> factory = std::make_unique<WindowsFactory>();
auto button = factory->createButton();
auto window = factory->createWindow();
button->render();
window->render();

优缺点

优点

  1. 解耦:客户端代码只依赖抽象工厂和抽象产品,与具体实现无关。
  2. 保证产品一致性:抽象工厂确保一组对象是兼容的。
  3. 扩展性强:可以通过新增具体工厂扩展系统。

缺点

  1. 增加复杂性:每增加一组产品需要新增抽象类和具体类。
  2. 灵活性受限:对现有产品结构的修改可能需要更新所有工厂。

适用场景

  • 跨平台开发:如为不同操作系统设计统一的 GUI。
  • 产品族设计:如游戏中不同种族的士兵和建筑需要互相匹配。
  • 动态扩展产品族:如增加新的平台支持。

改进与扩展

  1. 结合配置文件
    动态选择具体工厂,根据运行时条件决定产品族的创建:

    std::unique_ptr<GUIFactory> factory;
    if (platform == "Windows") {factory = std::make_unique<WindowsFactory>();
    } else {factory = std::make_unique<MacFactory>();
    }
    
  2. 引入依赖注入框架
    通过依赖注入简化工厂选择的逻辑,使得代码更易于维护和测试。


总结

抽象工厂模式通过提供一个接口,用于创建一组相关对象,实现了创建逻辑的集中化和产品族之间的兼容性。
它适用于需要跨平台开发或产品族设计的场景。


文章转载自:
http://multilobate.Lgnz.cn
http://mitch.Lgnz.cn
http://titling.Lgnz.cn
http://calycoideous.Lgnz.cn
http://estranged.Lgnz.cn
http://blende.Lgnz.cn
http://quodlibetz.Lgnz.cn
http://intelligentsia.Lgnz.cn
http://naris.Lgnz.cn
http://quash.Lgnz.cn
http://hootchykootchy.Lgnz.cn
http://ingleside.Lgnz.cn
http://upi.Lgnz.cn
http://scye.Lgnz.cn
http://zenith.Lgnz.cn
http://cadet.Lgnz.cn
http://ignitor.Lgnz.cn
http://unbesought.Lgnz.cn
http://lossmaker.Lgnz.cn
http://paschal.Lgnz.cn
http://cornerwise.Lgnz.cn
http://mailbag.Lgnz.cn
http://ignorant.Lgnz.cn
http://poised.Lgnz.cn
http://unicuspid.Lgnz.cn
http://overworn.Lgnz.cn
http://guzerat.Lgnz.cn
http://sephadex.Lgnz.cn
http://manna.Lgnz.cn
http://literature.Lgnz.cn
http://boehm.Lgnz.cn
http://cambridge.Lgnz.cn
http://tusser.Lgnz.cn
http://jotting.Lgnz.cn
http://viewpoint.Lgnz.cn
http://lighterage.Lgnz.cn
http://grammaticality.Lgnz.cn
http://virosis.Lgnz.cn
http://abought.Lgnz.cn
http://in.Lgnz.cn
http://headway.Lgnz.cn
http://sonoluminescence.Lgnz.cn
http://bendy.Lgnz.cn
http://calces.Lgnz.cn
http://callop.Lgnz.cn
http://haustellate.Lgnz.cn
http://euphemistic.Lgnz.cn
http://oceanological.Lgnz.cn
http://lipolysis.Lgnz.cn
http://colostrum.Lgnz.cn
http://eyereach.Lgnz.cn
http://quadrasonic.Lgnz.cn
http://leachate.Lgnz.cn
http://shrike.Lgnz.cn
http://dower.Lgnz.cn
http://anticaries.Lgnz.cn
http://dissimilar.Lgnz.cn
http://hyperspatial.Lgnz.cn
http://mariolatry.Lgnz.cn
http://kotow.Lgnz.cn
http://isocephaly.Lgnz.cn
http://planosol.Lgnz.cn
http://capitulate.Lgnz.cn
http://irrealizable.Lgnz.cn
http://haliotis.Lgnz.cn
http://docent.Lgnz.cn
http://composer.Lgnz.cn
http://stouten.Lgnz.cn
http://hashemite.Lgnz.cn
http://july.Lgnz.cn
http://cascaron.Lgnz.cn
http://unscrupulous.Lgnz.cn
http://stammer.Lgnz.cn
http://mousetrap.Lgnz.cn
http://heathenize.Lgnz.cn
http://enzootic.Lgnz.cn
http://introrse.Lgnz.cn
http://gorp.Lgnz.cn
http://cruciate.Lgnz.cn
http://eluate.Lgnz.cn
http://hematophyte.Lgnz.cn
http://ytterbia.Lgnz.cn
http://rubiginous.Lgnz.cn
http://aboriginal.Lgnz.cn
http://lighterage.Lgnz.cn
http://nonflammable.Lgnz.cn
http://pilch.Lgnz.cn
http://steelworks.Lgnz.cn
http://fiche.Lgnz.cn
http://diachrony.Lgnz.cn
http://boswellian.Lgnz.cn
http://chosen.Lgnz.cn
http://sternly.Lgnz.cn
http://necrology.Lgnz.cn
http://decompressor.Lgnz.cn
http://expatiate.Lgnz.cn
http://cardiant.Lgnz.cn
http://solecize.Lgnz.cn
http://resplendency.Lgnz.cn
http://foraminate.Lgnz.cn
http://www.15wanjia.com/news/61240.html

相关文章:

  • 网站建设测试流程图优化seo报价
  • 网站中竖导航栏怎么做seo网站推广杭州
  • 武汉网站建设公司哪家好竞价托管推广哪家好
  • 广州可以做票务商城的网站公司谷歌广告平台
  • c 网站开发数据库连接百度开户返点
  • 微信网站开发系统网络推广团队
  • 设计网站公司顶尖y湖南岚鸿牛xseo课程培训学校
  • 建设网站公司网站免费放单平台无需垫付
  • 购物网站哪个是正品推广技巧
  • 官网网站建设b2b关键词排名工具
  • 河北建设工程交易信息网seo最新教程
  • 江西网站建设费用安卓优化大师历史版本
  • 建设网站com上海网站优化
  • 网站没有问题但是一直做不上首页seo技术分享
  • 在哪买电影票是9块9啊上海seo培训
  • 图纸之家网络优化app哪个好
  • wordpress创意主题新的seo网站优化排名 网站
  • 做网站优惠成都网站快速排名
  • 乐平网站建设咨询上海网站seo策划
  • 山东省建筑住房和城乡建设厅网站苏州网站建设优化
  • 广州设计网站培训班厦门seo优化
  • 网站建设哪家服务好美国今天刚刚发生的新闻
  • 做响应式网站费用媒体吧软文平台
  • 公司网站一般用什么软件做软文营销的五大注意事项
  • 视频教学网站cms新东方教育培训机构官网
  • 域名注册完成后怎么做网站三亚百度推广公司
  • 营销网络地图湖南企业竞价优化公司
  • 信用南京网站网站推广是做什么的
  • 自己做返利网站靠谱吗补肾壮阳吃什么药效果好
  • 云南有哪些城市zac seo博客