C#通过抽象工厂模式造车
作者:Darren?Ji 时间:2021-07-05 04:20:55
可以用抽象工厂模式来造车。
车的品牌有很多,而且车的属性也不少,比如车的类型、排量、门的数量,等等。可以提炼出有关车的一个抽象类:
public abstract class Car
{
public string Model { get; set; }
public string Engine { get; set; }
public string Transmission { get; set; }
public string Body { get; set; }
public int Doors { get; set; }
public List<string> Accessores = new List<string>();
public abstract void ShowCarInfo();
}
既然是抽象工厂,提炼出一个造车的接口:
public interface ICarFactory
{
Car ProduceCar();
}
写一个Car的派生类:
public class MyCar : Car
{
public MyCar()
{
Model = "型号001";
Engine = "发动机V";
Transmission = "排量1";
Body = "SUV";
Doors = 4;
Accessores.Add("内饰");
Accessores.Add("外饰");
}
public override void ShowCarInfo()
{
Console.WriteLine(Model);
Console.WriteLine(Engine);
Console.WriteLine(Body);
Console.WriteLine("门数量:" + Doors);
Console.WriteLine("包括:");
foreach (var accessory in Accessores)
{
Console.WriteLine("\t{0}", accessory);
}
}
}
MyCar需要一个对应的具体工厂来造车。写一个具体工厂类,实现ICarFactory接口。
public class MyFactory : ICarFactory
{
public Car ProduceCar()
{
return new MyCar();
}
}
在客户端,如果要造车,就找具体工厂就可以了。
static void Main(string[] args)
{
ICarFactory carFactory = new MyFactory();
carFactory.ProduceCar().ShowCarInfo();
Console.ReadKey();
}
总结:
1、需要工厂生产对象的抽象类以及派生类
2、需要一个抽象工厂接口
3、通过抽象工厂造车,必须把所有的细节都设计在代表车的抽象类中,扩展性不好
来源:https://www.cnblogs.com/darrenji/p/4619346.html
标签:C#,抽象,工厂,模式,造车
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
java对象初始化代码详解
2023-09-19 13:59:01
在Android项目中使用AspectJ的方法
2023-02-01 23:33:54
C#使用NOPI库实现导入Excel文档
2022-12-23 07:56:28
InterProcessMutex实现zookeeper分布式锁原理
2023-08-11 05:46:43
![](https://img.aspxhome.com/file/2023/4/71914_0s.jpg)
SpringBoot@DeleteMapping(/xxx/{id})请求报405的解决
2022-06-13 14:00:48
![](https://img.aspxhome.com/file/2023/8/78338_0s.png)
Spring Security账户与密码验证实现过程
2023-03-04 21:54:37
![](https://img.aspxhome.com/file/2023/8/97948_0s.png)
C#不提升自己程序的权限实现操作注册表
2023-01-24 18:51:31
![](https://img.aspxhome.com/file/2023/0/82150_0s.png)
Android中AsyncTask与handler用法实例分析
2023-12-04 00:01:52
![](https://img.aspxhome.com/file/2023/8/88128_0s.png)
SpringBoot自定义启动器Starter流程详解
2022-08-25 08:28:19
![](https://img.aspxhome.com/file/2023/3/119053_0s.png)
Java 1.0和Java 1.1 的IO类的比较
2023-10-07 10:48:39
![](https://img.aspxhome.com/file/2023/0/69350_0s.jpg)
Android自定义View实现渐变色进度条
2022-11-25 08:27:17
![](https://img.aspxhome.com/file/2023/4/98694_0s.png)
C# 开发step步骤条控件详解
2021-07-01 00:53:14
![](https://img.aspxhome.com/file/2023/0/80040_0s.png)
.NET垃圾回收器(GC)原理浅析
2023-11-24 13:50:56
![](https://img.aspxhome.com/file/2023/6/102396_0s.png)
Java实战之酒店人事管理系统的实现
2021-06-02 16:44:37
![](https://img.aspxhome.com/file/2023/0/71200_0s.jpg)
idea中将单个java类导出为jar包文件的方法
2022-08-18 11:15:55
![](https://img.aspxhome.com/file/2023/7/71847_0s.png)
logcat命令使用方法和查看android系统日志缓冲区内容的方法
2022-06-09 10:42:36
jackson反序列化时如何忽略不需要的字段
2021-09-26 20:36:20
C#生成PDF文件流
2023-03-19 08:52:56
SpringBoot 创建web项目并部署到外部Tomcat
2023-09-15 18:25:04
Java面试题冲刺第十八天--Spring框架3
2023-04-17 22:44:29
![](https://img.aspxhome.com/file/2023/4/96124_0s.jpg)