工厂模式与抽象工厂模式,相信同行不会陌生.在网上及相关书里面也看过这方面的介绍(推荐这两本书:Steven John Metsker's Design Patterns in c# 和 Gof's Design Pattern Framework2.0).今天抽点时间,写点这方面的东西,希望能起到一点抛砖引玉的作用.
工厂模式与抽象工厂模式是应用得比较多的构造型模式,先简单的介绍一下这种构造模式的应用背景:
在开发一个类的过程中,我们一般都要为这个类开发相应的构造函数(不过大部分情况下,.NET开发环境会自动默认创建构造函数),这样,使用这个类的客户可以利用构造函数对这个类进行实例化.但是,有时候会出现这种情况:需要使用一个对象的客户并不知道(或者不应该知道)应该对几个类中的哪个类进行初始化.面对这个问题,我们可以利用工厂模式定义一个接口,客户可以使用这个接口创建一个对象.同时我们还可以控制对哪个类进行实例化,实例化过程使用了一个方法,这个方法需要利用外部因素来确定对哪个类进行实例化.有时候,这些外部因素就是一个庞大的研究主题,并且往往会涉及到多个类.为此,抽象工厂模式就应用于这种场合,其目的是为了提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类”,至少“无需指定它们具体的类”符合我们的要求。
下面就Gof's Design Pattern Framework2.0中的一个UML class diagram及一个通俗易懂的例子来说明一下:

这个图比较形象直观,能很清楚的看出抽象工厂与工厂以及客户之间的关系.
下面就举个例子来看看:
假如我的程序中有需要一系列的对象,比如bed,desk,chair…, 要想利用他们,我们就必须在程序中根据用户要求,然后一个个调用
new 操作符来生成他们,这样客户程序就要知道相应的类的信息,生成的代码显然不够灵活。再此它们显然是一类的,都是furniture,既然如此,我们只要一个生产家具的工厂就可以.我们可以在代码中不利用具体的类,而只是说明我们需要什么,然后就能够得到我们想要的对象.
先定义一个类,主要声明一个家具接口,床和椅子的类:
Public interface IFurniture
{
}
public class Bed:IFurniture
{
public Bed()
{
Console.WriteLine("I need a bed!");
}
}
public class Desk:IFurniture
{
public Desk()
{
Console.WriteLine("I need a desk!");
}
}
public class Chair:IFurniture
{
public Chair()
{
Console.WriteLine("I need a chair!");
}
}
再定义一个家具工厂的类(可以利用反射机制中Type类获取Name指定的类名的类的Type信息,然后可以根据这个信息利用System.Activator创建对象):
public class FurnitureFactory
{
public IFurniture MakeFurniture(string Name)
{
IFurniture MyFurniture = null;
try
{
Type type = Type.GetType(Name,true);
MyFurniture = (IFurniture)Activator.CreateInstance(type);
}
catch (TypeLoadException e)
Console.WriteLine("I dont know this kind of furniture,
exception caught - {0}" ,e.Message);
return MyFurniture;
}
}
然后在以客户端进行程序调用:
string FurnitureName = Console.ReadLine();
IFurniture MyFurniture;
FurnitureFactory MyFurnitureFactory = new FurnitureFactory();
MyFurniture = MyFurnitureFactory.MakeFurniture(FurnitureName);
就这样预期想实现的,通过这样就实现了.当然这个例子比较简单,但是它却通过工厂模式的思想实现了代码的灵活性.应用软件系统开发中,有许多地方可以考虑使用工厂模式.比如在写数据层的代码时候,考虑到程序的可移植性,可拓展性,面向不同的数据库时,采用工厂模式不为是一件理想的实现方式.
分享到:
相关推荐
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...
简单工厂模式是一种静态工厂方法,它创建一个具体的对象而无需暴露创建逻辑。在C#中,我们可以定义一个工厂类,该类包含一个静态方法,用于根据输入参数返回不同类型的实例。例如,一个形状工厂可以生成圆形、...
在这个压缩包中,包含了三种工厂模式的C++实现:简单工厂模式、工厂方法模式以及抽象工厂模式。让我们一一探讨这些模式。 1. 简单工厂模式: 简单工厂模式是一种静态工厂方法,它提供一个公共的工厂类来创建对象。...
工厂模式分为三种主要类型:简单工厂模式、普通工厂模式(也称为工厂方法模式)和抽象工厂模式。 1. **简单工厂模式**: - 简单工厂模式中,有一个中心工厂类,它负责根据输入条件(通常是一个参数)来创建具体的...
简单工厂模式适用于快速原型开发或小型项目,而工厂方法和抽象工厂模式则更适合大型项目或需要高度灵活性的系统。理解并熟练运用这些设计模式,能够提高代码的可维护性和可扩展性,也是成为一名专业IT从业者必备的...
根据应用场景的不同,工厂模式可以进一步分为简单工厂模式、工厂方法模式以及抽象工厂模式。 #### 二、简单工厂模式 简单工厂模式是最基础的工厂模式实现方式,它的主要特点是使用一个工厂类来负责创建所有产品...
接着,我们讨论“抽象工厂模式+简单工厂模式”。简单工厂模式是一种更为基础的工厂模式,它包含一个静态方法,用于根据输入参数返回一个具体的产品实例。相比抽象工厂模式,简单工厂模式通常处理的产品种类较少,...
在C#中,工厂模式可以分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。每一种模式都有其特定的应用场景和优势,旨在解决类的实例化过程中的灵活性和可扩展性问题。 1. **简单工厂模式(Simple ...
### 简单工厂模式、工厂模式、抽象工厂模式 #### 一、引子 假设有一位暴发户,家里有两辆豪车——Benz和BMW,并雇用了司机为他服务。按照原始的设计思路,每当暴发户需要用车时,都需要明确告诉司机要开哪辆车。...
简单工厂模式、工厂模式和抽象工厂模式是软件设计中常见的三种设计模式,它们都属于创建型设计模式,用于解决对象的创建问题,特别是在需要根据不同的条件或者类型来创建对象时。 1. **简单工厂模式(Simple ...
本文将深入探讨三种工厂模式:简单工厂模式、工厂方法模式以及抽象工厂模式,并结合源码分析其应用场景和优缺点。 1. 简单工厂模式 简单工厂模式(Simple Factory Pattern)是一种静态工厂方法,它通过一个公共的...
简单工厂模式、工厂模式、抽象工厂模式 总结介绍
它是简单工厂模式的一种扩展,它将产品实例化的责任委托给子类。在手机加工厂的场景中,每个手机品牌工厂都可以看作是工厂方法模式的一个实现,它们各自负责特定型号手机的组装和测试,例如iPhone工厂负责制造iPhone...
首先,让我们理解抽象工厂模式的基本概念。在该模式中,我们定义一个创建对象的接口,但让子类决定实例化哪一个类。抽象工厂方法让类的实例化推迟到子类。在C#中,我们可以用接口(Interface)来定义抽象工厂,然后...
让我们深入探讨一下抽象工厂模式的原理、结构以及如何在C#中实现它。 1. **模式定义** 抽象工厂模式的核心思想是为创建一组相关或相互依赖的对象提供一个接口,这个接口不直接创建对象,而是返回一个工厂对象,由...
"简单工厂模式"和"抽象工厂模式"是两种非常重要的创建型设计模式,它们在对象创建过程中扮演着关键角色。 首先,我们来看简单工厂模式(Simple Factory Pattern)。它是一个类的工厂,负责创建对象,客户通过调用...
在软件设计模式中,工厂模式是一组非常基础且重要的设计思想,它们主要用来解决对象...在“简单工厂模式与工厂模式和抽象工厂模式.pdf”文件中,应该会有详细的理论介绍和案例解析,帮助读者更好地理解和应用这些模式。
总的来说,这个C#项目展示了如何利用抽象工厂模式来创建和管理具有不同主题的UI组件。通过这种方式,我们可以轻松地切换应用的主题,只需要改变使用的工厂即可,而无需修改使用这些组件的业务逻辑代码。抽象工厂模式...
3. **抽象工厂模式**:在抽象工厂模式中,不仅提供了一个创建产品对象的接口,还提供了创建相关或依赖对象的接口。这使得用户可以得到一组相关的对象,而无需关心它们的具体实现。这种模式通常用于跨平台或者有多种...