>>返回《C#常用设计模式》
- 1. 简介
- 2. 示例
- 2.1. 武器工厂例子
- 2.2. 数据库访问工厂代码示例
- 3. 要点
1. 简介
抽象工厂就是将生产实例的工厂和生产的产品进行抽象,使得可以在不同的场景更换工厂,生产出具有抽象产品特点的一系列实际产品。
类图:
抽象工厂: AbstractFactory
实际工厂: ConcreteFactory1, ConcreteFactory1
抽象产品: AbstractProductA, AbstractProductB
实际产品: ProductA1, ProductA2
2. 示例
2.1. 武器工厂例子
时间定位在出现了热兵器之后,热兵器的出现,导致武器被细分,需要将之前使用工厂方法的业务复杂化,抽象出了携带方便的武器和威力强的武器,导致工厂方法的设计不能满足我们的需求,这个时候出现了抽象工厂设计模式。
- 抽象工厂类定义工厂生产哪些产品,其中生产方法的定义,比如:生产携带方便的武器、生产威力强的武器;
- 抽象工厂制造的产品抽象出产品的特点作为产品基类,比如:武器(攻击),武器的派生类携带方便的武器(绑在腿上),其中基类武器,不是必须的;
- 具体的实现工厂继承抽象工厂,比如:军刀工厂继承武器工厂;
- 实际产品为:携带方便的武器(匕首),威力强的武器(砍刀);
- 匕首会实现相应的方法(攻击、绑在腿上);
- 设计带来的适应性:
- 开始使用特定的工厂生产匕首、军刀
- 由于武器的应用场景被细分,武器被分为了多个种类,后来时代进步出现了枪械等武器,激化了矛盾导致设计重构
- 首先,细分产品抽象: 携带方便的武器和生产威力强的武器
- 然后,重构工厂抽象,使其支持创建上述两种抽象武器
- 最后,编写相应的抽象的实现:军刀工厂、枪械工厂、匕首、太刀、手枪、机枪
- 这样实现了现有需求,而且具备了适应可能出现的武器(比如:激光武器)的适应性
2.2. 数据库访问工厂代码示例
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Demo{ class Program { static IFactory fac = new MySQLFactory(); static void Main(string[] args) { IUserDAL userDAL = fac.CreateUserDAL(); userDAL.AddUser(); Console.ReadKey(); } } #region 定义接口 //约定工厂能创建那些类型产品 武器工厂 public interface IFactory { IUserDAL CreateUserDAL(); IRoleDAL CreateRoleDAL(); } //约定工厂产品的特点 携带方便的武器 public interface IUserDAL { void AddUser(); } // 威力强的武器 public interface IRoleDAL { void AddRole(); }
没有评论:
发表评论