C#通过抽象工厂模式造车
作者:Darren?Ji 发布时间:2021-07-05 04:20:55
标签:C#,抽象,工厂,模式,造车
可以用抽象工厂模式来造车。
车的品牌有很多,而且车的属性也不少,比如车的类型、排量、门的数量,等等。可以提炼出有关车的一个抽象类:
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
0
投稿
猜你喜欢
- 一、场景笔者就Zuul网关下实现其负载均衡与熔断机制(雪崩)进行实践,前提是已经导入zuul相关依赖springboot版本:1.5.9.R
- 本文实例讲述了C#实现发送邮件的三种方法。分享给大家供大家参考。具体方法分析如下:一、问题:最近公司由于一个R&I项目的需要,用户要
- 设计算法,计算两给定基因序列的相似程度。人类基因由4种核苷酸,分别用字母ACTG表示。要求编写一个程序,按以下规则比较两个基因序列并确定它们
- 在项目中经常要用到将字符串解析成Locale,但是没有一个比较好用的类。java本身提供了3个构造函数,但是实际使用过程中,需要自己解析,比
- 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此
- 前言众所周知Spring Boot是非常高效的开发框架,lombok是一套代码模板解决方案,将极大提升开发的效率,这里介绍给大家使用。文中详
- HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCod
- Android 资源文件夹 Layout 文件夹Layout文件是存放Android的布局文件的资源文件夹,但是如果你想要在里面创建子文件夹
- 废话不多说了,直接给大家贴java代码了。具体代码如下所示:/*支付流程*//****Controller.java 代码如下:*/@Req
- Mybatis的Dao层实现传统开发方式编写UserDao接口public interface UserDao {  
- Synchronized关键字Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码
- 前言本文主要给大家介绍了关于Android在Gradle中更改APK文件名的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细
- java Mybatis存进时间戳封装了一个实体类,里面有个字段 Integer createTime。要利用这个实体类将一个时间戳存进数据
- 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Ap
- SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库。Android提供了3种操作数据的方式,SharedPrefe
- 一、项目简述功能:登录,门诊划价,收费,报表,药品管理等等功能。二、项目运行运行环境: Jdk1.8 + Tomcats . 5 + mys
- 这篇文章主要介绍了java内存泄漏与内存溢出关系解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 前言Spring Boot中在yaml中编写的自定义变量、数组、对象等,在代码中读取该yaml配置文件中内容的三种方式。实现在代码中运用配置
- 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机,那么内存模型JMM是做什么用的呢?我们考虑一个简单的赋值问题:in
- ShardingSphere的路由引擎类型本篇文章源码基于4.0.1版本上篇文章我们了解到了ShardingSphere在路由流程过程中,根