C#设计模式之抽象工厂(abstract factory)模式示例源代码

设计|示例|源代码

using System;

namespace Design_Pattern
{

 public class  Computer
 {
  private RAM Ram;
  private CPU Cpu;
  public Computer(RAM ram,CPU cpu)
  {
   this.Ram =ram;
   this.Cpu =cpu;
   
   Console .WriteLine("A Computer is Composed! "+this.Ram +" "+this.Cpu );
  }
 }

 public abstract class RAM
 {
  public abstract  Computer ComposeAComputer(CPU cpu);
 }
 public abstract class CPU
 {
 public abstract  Computer ComposeAComputer(RAM ram);
 }
 

 public class pcRAM:RAM
 {
  public override Computer ComposeAComputer(CPU cpu)
  {
   Console .WriteLine ("pcComputer...");

   return new Computer(this,cpu);
  }

  
 }

 public class pcCPU:CPU
 {
  public override Computer ComposeAComputer(RAM ram)
  {
   Console .WriteLine ("pcComputer...");

   return new Computer(ram,this);
  }

 }

 public class macRAM:RAM
 {
  public override Computer ComposeAComputer(CPU cpu)
  {
   Console .WriteLine ("MacComputer...");
   return new Computer(this,cpu);
  }

  
 }

 public class macCPU:CPU
 {
  public override Computer ComposeAComputer(RAM ram)
  {
   Console .WriteLine ("MacComputer...");
   return new Computer(ram,this);
  }

 }
 
 public abstract class abstractFactory
{
       public abstract  RAM CreateRam();
   public abstract CPU CreateCpu() ;
}

 public class PcFactory:abstractFactory
 {
  public override RAM CreateRam()
  {
   return new pcRAM();
  }
  public override CPU CreateCpu()
  {
   return new pcCPU();
  }

 }

 public class MacFactory:abstractFactory
 {
  public override RAM CreateRam()
  {
   return new macRAM();

  }
  public override CPU CreateCpu()
  {
   return new macCPU();
  }

 }

 class ITMarket
 {
  private RAM ram;
  private CPU cpu;
  public ITMarket(abstractFactory factory)
  {
   this.ram =factory.CreateRam();
   this.cpu =factory.CreateCpu();
  }
  public void Run()
  {
   ram.ComposeAComputer(cpu);
   cpu.ComposeAComputer(ram);
  }

 }

 class ClientApp
 {
  public static void Main(string[] args)
  {
   Console .WriteLine("PC Factory.....\n");
   abstractFactory pcfactory=new PcFactory ();
   ITMarket itMarket=new ITMarket (pcfactory);
   itMarket .Run ();

   Console .WriteLine("MAC Factory.....\n");
   abstractFactory macfactory=new MacFactory();
   itMarket =new ITMarket (macfactory);
   itMarket .Run ();
  }
 }

   

}

时间: 2024-10-31 13:45:01

C#设计模式之抽象工厂(abstract factory)模式示例源代码的相关文章

工厂模式之三 - 抽象工厂(Abstract Factory)模式

抽象工厂(Abstract Factory)模式 不同于简单工厂和工厂方法,抽象工厂用于创建一个产品族, 即抽象工厂模式用于创建一系列类,这些类在业务上有关联. 我们来举个快餐店的例子. 场景:快餐店的套餐分为汉堡和饮料,汉堡可以选鸡肉汉堡,鱼肉汉堡,巨无霸等等,          饮料可以选咖啡,可乐,橙汁等等.   对于业务来说,汉堡和饮料分别可以被抽象为两类产品,因此,我们可以建立2个接口. 汉堡可以有2个方法,一个是打印汉堡名,一个是打印价钱,如下: namespace designpa

乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) 作者:webabcd 介绍 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例 有Message和MessageModel,Message有一个Insert()方法,该方法的参数是MessageModel. AbstractMessageModel usi

设计模式学习笔记(五)—Abstract Factory抽象工厂模式

GOF<设计模式>一书对Abstract Factory模式是这样描述的: 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类. 大致意思是说:我们在创建这些对象的时候,并不需要指定它们的具体类,这些具体类的对象是由工厂对象负责实例化的.下面是<Design Patterns Explained>一书的例子,有关计算机系统的显示和打印程序,用来显示和打印的分辨率取决于当前运行的系统.低端机使用低分辨率的显示和打印驱动程序,高端机使用高分辨率的显示和打印驱动程序.其

设计模式的解析和实现(C++)之二-Abstract Factory模式

作用: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. UML结构图: 抽象基类: 1)ProductA,ProductB:分别代表不同类型的产品,而它们的派生类则是这种产品的一个实现. 2)AbstractFactory:生产这一系列产品的一个抽象工厂,它的派生类是不同的实现. 接口函数: 1)AbstractFactory::CreateProductA和AbstractFactory::CreateProductB:分别是生产不同产品的不同的实现,由各个派生出来的抽象

C#设计模式(4)——抽象工厂模式

原文:C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性.但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题,这是本专

设计模式之四(抽象工厂模式第三回合)

原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如IFactory factory=new AccessFactory(),在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置.我们的设计不能去防止需要的变更,那么我们的理想便是让改动变得最小,那么现在如果你要更改数据库访问,

设计模式之四(抽象工厂模式第一回合)

原文:设计模式之四(抽象工厂模式第一回合) 前言 首先关于抽象工厂模式的学习,我们需要慢慢的,由浅入深的进入.不能单刀直入,否则可能达不到预期学明白的目标. 第一回合  首先我们从最简单的数据访问程序开始吧. 下面先来看一个简单的小例子,代码很简单 public class User { public int ID{get;set;} public string Name{get;set;} } 一个简单的实体类,也相当于在SqlServer数据库中建立了相同的数据表 public class

C++设计模式之抽象工厂模式_C 语言

问题描述 之前讲到了C++设计模式--工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理:由于工厂方法模式创建的对象都是继承于Product的,所以工厂方法模式中,每个工厂只能创建单一种类的产品,当需要生产一种全新的产品(不继承自Product)时,发现工厂方法是心有余而力不足. 举个例子来说:一个显示器电路板厂商,旗下的显示器电路板种类有非液晶的和液晶的:这个时候,厂商建造两个工厂,工厂A负责生产非液晶显示器电路板,工厂B负责生产

.NET简谈设计模式之(抽象工厂模式)

我们继续学习设计模式系列文章. 今天要讲的是设计模式中经常被用到的"工厂模式",所谓工厂模式就是将对象的创建交给一个叫做工厂的对象来统一进行处理.主要是将对象的依赖关系进行解耦,消除对象之间的直接耦合.那么工厂的使用有几种方式呢?那就要看我们对工厂的理解了,工厂是创建对象的一个逻辑名称,工厂可以是一个方法.一个静态类等等.只要起到对象的创建就能给它赋予上一个工厂的名称. 那么什么是抽象工厂呢?我想很多人对它的理解并不是很透彻,甚至有的人就觉得工厂一定要是抽象的.我表示不理解,一个抽象类