前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之抽象工厂模式

设计模式之抽象工厂模式

作者头像
beginor
发布2020-08-10 11:29:33
2690
发布2020-08-10 11:29:33
举报

设计模式之抽象工厂模式

结构

抽象工厂模式
抽象工厂模式

说明

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

为一个产品族提供了统一的创建接口。当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类。

适用条件

  1. 一个系统要独立于其产品的创建、组合和表示时;
  2. 一个系统需要由多个产品系列中的一个来配置时;
  3. 需要提供一个产品类库, 而只想显示他们的接口, 而隐藏他们的实现时。

实现

代码语言:javascript
复制
public interface IButton {

   void Paint();

}

public interface IGuiFactory {

   IButton CreateButton();

}

public class OsxButton : IButton {

   public void Paint() {
      Console.WriteLine("I'm an OSXButton");
   }

}

public class WinButton : IButton {

   public void Paint() {
      Console.WriteLine("I'm a WinButton");
   }

}

public class OsxFactory : IGuiFactory {

   IButton IGuiFactory.CreateButton() {
      return new OsxButton();
   }

}

public class WinFactory : IGuiFactory {

   IButton IGuiFactory.CreateButton() {
      return new WinButton();
   }

}

public class Application {

   public Application(IGuiFactory factory) {
      var button = factory.CreateButton();
      button.Paint();
   }

}

public class ApplicationRunner {

   static IGuiFactory CreateOsSpecificFactory() {
      var sysType = ConfigurationManager.AppSettings["OS_TYPE"] ?? "Win";
      if (sysType == "Win") {
         return new WinFactory();
      }
      return new OsxFactory();
   }

   static void Main(string[] args) {
      new Application(CreateOsSpecificFactory());
      Console.ReadKey();
   }

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设计模式之抽象工厂模式
    • 结构
      • 说明
        • 适用条件
          • 实现
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档