c# 设计模式 之:工厂模式之---简单工厂
2024-09-27 19:59:58
1、uml类图如下:
具体实现和依赖关系:
实现:SportCar、JeepCar、HatchbackCar 实现 Icar接口
依赖:
Factory依赖 SportCar、JeepCar、HatchbackCar
Client依赖:Icar接口和Factory类
2、具体实现:
抽象产品类代码:
namespace CNBlogs.DesignPattern.Common
{
/// <summary>
/// 抽象产品类: 汽车
/// </summary>
public interface ICar
{
void GetCar();
}
}
具体产品类代码:
namespace CNBlogs.DesignPattern.Common
{
public enum CarType
{
SportCarType = ,
JeepCarType = ,
HatchbackCarType =
} /// <summary>
/// 具体产品类: 跑车
/// </summary>
public class SportCar : ICar
{
public void GetCar()
{
Console.WriteLine("场务把跑车交给范·迪塞尔");
}
} /// <summary>
/// 具体产品类: 越野车
/// </summary>
public class JeepCar : ICar
{
public void GetCar()
{
Console.WriteLine("场务把越野车交给范·迪塞尔");
}
} /// <summary>
/// 具体产品类: 两箱车
/// </summary>
public class HatchbackCar : ICar
{
public void GetCar()
{
Console.WriteLine("场务把两箱车交给范·迪塞尔");
}
}
}
简单工厂核心代码:
namespace CNBlogs.DesignPattern.Common
{
public class Factory
{
public ICar GetCar(CarType carType)
{
switch (carType)
{
case CarType.SportCarType:
return new SportCar();
case CarType.JeepCarType:
return new JeepCar();
case CarType.HatchbackCarType:
return new HatchbackCar();
default:
throw new Exception("爱上一匹野马,可我的家里没有草原. 你走吧!");
}
}
}
}
客户端调用代码:
//------------------------------------------------------------------------------
// <copyright file="Program.cs" company="CNBlogs Corporation">
// Copyright (C) 2015-2016 All Rights Reserved
// 原博文地址: http://www.cnblogs.com/toutou/
// 作 者: 请叫我头头哥
// </copyright>
//------------------------------------------------------------------------------
namespace CNBlogs.DesignPattern
{
using System;
using CNBlogs.DesignPattern.Common; class Program
{
static void Main(string[] args)
{
ICar car;
try
{
Factory factory = new Factory(); Console.WriteLine("范·迪塞尔下一场戏开跑车。");
car = factory.GetCar(CarType.SportCarType);
car.GetCar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
- 优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
- 缺点:很明显工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则
最新文章
- Excel2013 基本用法(上)
- ListMultimap 容器
- 将Sql Server迁移到Always on集群 - 账号的同步
- Oracle procedure存储过程/function函数
- ORA-00214: control file 控制文件版本不一致
- SolrCloud初识
- Webkit之HTML解析
- CRS-2800 CRS-4000
- Java虚拟机学习 - 体系结构 内存模型(1)
- iOS日历中给一个事件加入多个提醒
- js获取某个日期所在周周一的日期
- idea-全局默认maven配置
- Leetcode 17.——Letter Combinations of a Phone Number
- iOS 中的类属性
- 基于ZigBee模块与51单片机之间的简化智能家居项目简介(学生版本)
- jQuery each和js forEach用法比较
- echarts4的学习
- PHP判断是否都是中文
- C语言中的随意跳转
- beego + websocket 向页面推送数据
热门文章
- c#正则表达式--环视
- Mac休眠之后唤醒时无法使用鼠标
- TortoiseGit学习系列之Windows上TortoiseGit的安装详解(图文)
- mysql exceeded the &#39;max_questions&#39; resource 记录
- Steps to install Docker on Manjaro 16.10--转
- WPF中Window的ShowInTaskbar、Owner和Topmost属性
- java几个经典的算法题目----------二维矩阵算法
- C++中文件流操作
- 推荐网站 explainshell.com
- 基于node安装gulp-一些命令