设计模式之笔记--抽象工厂模式(Abstract Factory)
2024-10-09 20:53:33
抽象工厂模式(Abstract Factory)
定义
抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
类图
描述
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类;
一个抽象工厂类,可以派生出多个具体工厂类;
每个具体工厂可以创建多个具体产品,即每个工厂可以生产一个产品集合。
应用场景
轿车是由发动机、车轮、车体结构、方向盘等部件组成的,现在要生产一辆轿车,就需要把各个部件抽象出来单独封装,再由汽车工厂来组装轿车。
/// <summary>
/// 发动机接口
/// </summary>
public interface IEngine
{
void Install();
} /// <summary>
/// 奥迪发动机
/// </summary>
public class AudiEngine : IEngine
{
public void Install()
{
Console.WriteLine("安装奥迪的发动机.");
}
} /// <summary>
/// 奔驰发动机
/// </summary>
public class BenzEngine : IEngine
{
public void Install()
{
Console.WriteLine("安装奔驰的发动机.");
}
} /// <summary>
/// 车轮接口
/// </summary>
public interface IWheel
{
void InstallLeftFrontWheel();
void InstallRightFrontWheel();
void InstallLeftBackWheel();
void InstallRightBackWheel();
} /// <summary>
/// 奥迪车轮
/// </summary>
public class AudiWheel : IWheel
{
public void InstallLeftFrontWheel()
{
Console.WriteLine("安装奥迪的左前车轮.");
} public void InstallRightFrontWheel()
{
Console.WriteLine("安装奥迪的右前车轮.");
} public void InstallLeftBackWheel()
{
Console.WriteLine("安装奥迪的左后车轮.");
} public void InstallRightBackWheel()
{
Console.WriteLine("安装奥迪的右后车轮.");
}
} /// <summary>
/// 奔驰车轮
/// </summary>
public class BenzWheel : IWheel
{
public void InstallLeftFrontWheel()
{
Console.WriteLine("安装奔驰的左前车轮.");
} public void InstallRightFrontWheel()
{
Console.WriteLine("安装奔驰的右前车轮.");
} public void InstallLeftBackWheel()
{
Console.WriteLine("安装奔驰的左后车轮.");
} public void InstallRightBackWheel()
{
Console.WriteLine("安装奔驰的右后车轮.");
}
} /// <summary>
/// 车体结构接口
/// </summary>
public interface IBody
{
void Install();
} /// <summary>
/// 奥迪的车体结构
/// </summary>
public class AudiBody : IBody
{
public void Install()
{
Console.WriteLine("安装奥迪的车身结构.");
}
} /// <summary>
/// 奔驰的车体结构
/// </summary>
public class BenzBody : IBody
{
public void Install()
{
Console.WriteLine("安装奔驰的车身结构.");
}
} /// <summary>
/// 汽车工厂接口
/// </summary>
public interface ICarFactory
{
IBody CreateBody();
IEngine CreateEngine();
IWheel CreateWheel();
} /// <summary>
/// 具体的奥迪工厂类
/// </summary>
public class AudiFactory : ICarFactory
{
public IEngine CreateEngine()
{
return new AudiEngine();
} public IWheel CreateWheel()
{
return new AudiWheel();
} public IBody CreateBody()
{
return new AudiBody();
}
} /// <summary>
/// 具体的奔驰工厂类
/// </summary>
public class BenzFactory : ICarFactory
{
public IEngine CreateEngine()
{
return new BenzEngine();
} public IWheel CreateWheel()
{
return new BenzWheel();
} public IBody CreateBody()
{
return new BenzBody();
}
}
最新文章
- 在VisualStudio2012环境下安装ArcEngine 10.0
- ubuntu 12.04 ";系统的网络服务与此版本的网络管理器不兼容
- QQ聊天机器人for PHP版 (登录,收、发消息)
- DataGridView控件-学习笔记总结
- C# 通信学习笔记
- Suse发生了错误Access denied for user &;#39;&;#39;@&;#39;localhost&;#39; to&;amp;
- 吾爱破解脱壳练习第五期------upx壳
- 自己编写的仿京东移动端的省市联动选择JQuery插件
- XIV Open Cup named after E.V. Pankratiev. GP of Europe
- orcl数据库锁等级研究小记
- keepalived高可用系列~ keepalived+proxysql
- Servlet(9)—HttpServlet和改进Servlet实例
- scala-创建泛型数组(T: Manifest)
- Django学习笔记之数据库-数据库与模型
- 谈谈程序猿求职简历的STAR法则
- 四则运算-ppt演示
- ucore-lab1-练习4report
- 封装PDO连接数据库代码
- day30 python学习 struct模块和 subprocess 模块
- mysql系列学习