博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#设计模式——抽象工厂模式(Abstract Factory Pattern)
阅读量:6803 次
发布时间:2019-06-26

本文共 1751 字,大约阅读时间需要 5 分钟。

一、概述

在软件开发中,常常会需要创建一系列相互依赖的对象,同时,由于需求的变化,往往存在较多系列对象的创建工作。如果采用常规的创建方法(new),会造成客户程序和对象创建工作的紧耦合。对此,抽象工厂模式提供了一种解耦手段。
二、抽象工厂模式
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式的结构图如下:

AbstractFactory声明了一个创建抽象产品对象的操作接口。

ConcreteFactory实现了创建具体产品对象的操作。
AbstractProduct为一类产品对象声明一个接口。
ConcreteProduct实现AbstractProduct接口,定义一个将被相应的具体工厂创建的产品对象。
Client使用AbstractFactory和AbstractProduct声明的接口。
三、示例
我们以实现一个汽车工程为例来看一个简单的抽象工厂的例子。
首先定义抽象工厂

1     public abstract class CarFactory 2     {
3 public abstract void CreateWindows(); 4 public abstract void CreateWheels(); 5 }

接着实现两个具体的汽车工厂

1     public class BenzFactory : CarFactory  2     {
3 public override void CreateWindows() 4 {
5 Console.WriteLine("Create Benz Windows"); 6 } 7 8 public override void CreateWheels() 9 {
10 Console.WriteLine("Create Benz Wheels"); 11 } 12 } 13 public class BMWFactory : CarFactory 14 {
15 public override void CreateWindows() 16 {
17 Console.WriteLine("Create BMW Windows"); 18 } 19 20 public override void CreateWheels() 21 {
22 Console.WriteLine("Create BMW Wheels"); 23 } 24 }

最后看一下如何调用

1     static void Main(string[] args)  2     {
3 CarFactory carFactory = new BenzFactory(); 4 carFactory.CreateWindows(); 5 carFactory.CreateWheels(); 6 7 Console.WriteLine("Change Factory To BMWFactory"); 8 carFactory = new BMWFactory(); 9 carFactory.CreateWindows(); 10 carFactory.CreateWheels(); 11 12 Console.ReadLine(); 13 }

抽象工厂模式在实际应用中比较广泛,我们可以通过依赖注入的方式传递抽象工厂,并利用反射读取配置文件中关于具体工厂的信息,达到在不修改代码的情况下改变实际产品的目的。

转载地址:http://jpuwl.baihongyu.com/

你可能感兴趣的文章
jQuery 1.6 源码学习(二)——core.js[2]之extend&ready方法
查看>>
[WPF疑难] 继承自定义窗口
查看>>
WebRTC网关服务器单端口方案实现
查看>>
018 easygui的使用
查看>>
iphone 开发h5 踩过的坑
查看>>
微信支付demo集
查看>>
python读取json的工具jsonreader | the5fire的技术博客
查看>>
Sharepoint学习笔记—习题系列--70-576习题解析 -(Q99-Q101)
查看>>
转oracle 学习 - 表空间
查看>>
百度地图显示多个标注点
查看>>
robots.txt的介绍和写作
查看>>
11个实用jQuery日历插件
查看>>
MySQL slave状态之Seconds_Behind_Master
查看>>
国内外开源与 SaaS ,团队协作平台、项目管理工具整理
查看>>
oracle字符集查看修改
查看>>
[Leetcode] Container With Most Water
查看>>
查看版本信息的命令
查看>>
Linux搭建SVN服务器
查看>>
UML 之 数据流图(DFD)
查看>>
IO知识点整理(文件File类的使用)
查看>>