C#设计模式(3)——工厂方法模式(Factory Method)
在简单工厂模式中通过工厂Factory获取不同的对象,但是有一个明显的缺点——简单工厂模式系统难以扩展!
一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,
可以通过工厂方法模式可以解决简单工厂模式中存在的这个问题,看代码:
/// <summary>
/// 汽车抽象类
/// </summary>
public abstract class AuthCar
{
/// <summary>
/// 输出制造了什么汽车
/// </summary>
public abstract void CreatorCar();
} /// <summary>
/// 派生类-橘黄色轿车
/// </summary>
public class _OriangeCar : AuthCar
{
public override void CreatorCar()
{
Console.WriteLine("生产了橘黄色轿车!");
}
} /// <summary>
/// 派生类-黑色轿车
/// </summary>
public class _BlackCar : AuthCar
{
public override void CreatorCar()
{
Console.WriteLine("生产了黑色轿车");
}
}
汽车类下面有两种不同颜色的汽车(橘黄色和黑色),下面通过工厂抽象类得到不同的汽车。
/// <summary>
/// 工厂类
/// </summary>
public abstract class FactoryCreator
{
/// <summary>
/// 获取汽车对象
/// </summary>
/// <returns></returns>
public abstract AuthCar _AuthCar();
} /// <summary>
/// 得到黑色汽车实例
/// </summary>
public class BlackCarFactoryMethod : FactoryCreator
{
public override AuthCar _AuthCar()
{
return new _BlackCar();
}
}
/// <summary>
/// 得到橘黄色汽车实例
/// </summary>
public class OriangeFactoryMethod : FactoryCreator
{
public override AuthCar _AuthCar()
{
return new _OriangeCar();
}
}
测试
class Program
{
static void Main(string[] args)
{
FactoryCreator factoryCreator = new BlackCarFactoryMethod(); FactoryCreator factoryCreator = new OriangeFactoryMethod(); factoryCreator._AuthCar().CreatorCar(); Console.ReadKey();
}
}
使用工厂方法实现的系统,如果系统需要添加新产品时,我们可以利用多态性来完成系统的扩展,对于抽象工厂类和具体工厂中的代码都不需要做任何改动。
例如,我们我们还想输出一辆绿色汽车,此时我们只需要定义一个绿色汽车具体工厂类和绿色汽车类就可以。而不用像简单工厂模式中那样去修改工厂类中的实现(具体指添加case语句)。
C#设计模式(3)——工厂方法模式(Factory Method)的更多相关文章
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- 设计模式-03工厂方法模式(Factory Method Pattern)
插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- 二十四种设计模式:工厂方法模式(Factory Method Pattern)
工厂方法模式(Factory Method Pattern) 介绍定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 示例有SqlMes ...
- 设计模式之工厂方法模式(Factory Method Pattern)
一.工厂方法模式的诞生 在读这篇文章之前,我先推荐大家读<设计模式之简单工厂模式(Simple Factory Pattern)>这篇文档.工厂方法模式是针对简单工厂模式中违反开闭原则的不 ...
- 设计模式之 - 工厂方法模式 (Factory Method design pattern)
1. 模式意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 2. 别名(Virtual Constructor) 3. 结构 4. 工厂方法模式C ...
- 【UE4 设计模式】工厂方法模式 Factory Method Pattern 及自定义创建资源
概述 描述 又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式,或者多态工厂(Polymorphic Factory)模式 工厂父类负责定义创建产品对象的公共接口,而工厂子类 ...
- 工厂方法模式-Factory Method(Java实现)
工厂方法模式-Factory Method 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法让实例化的具体内容交给子类工厂来进行. 本文中的例子是这样的. 生产一个身份证, ...
- 浅谈C++设计模式之工厂方法(Factory Method)
为什么要用设计模式?根本原因是为了代码复用,增加可维护性. 面向对象设计坚持的原则:开闭原则(Open Closed Principle,OCP).里氏代换原则(Liskov Substitution ...
- IOS设计模式浅析之工厂方法模式(Factory Method)
概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口. 如何隔离出这个易变对象的变化,使得系统中“其它依赖该对象的对 ...
随机推荐
- kolla-ansible配置cinder 的ceph的多种后端存储池【转】
在实际的使用中,openstack后端采用ceph存储,存储磁盘类型有SATA和SSD,这里如果想基于存储驱动器提供多种云硬盘类型,可以基于下面的配置完成 点击查看配置详情
- ios 审核未通过 相机相册权限问题
苹果提交审核被打回来 附加的说明如下: We noticed that your app requests the user’s consent to access their camera but ...
- Java错误:结束的字符文字
编译器为NetBeans 在学习java的时候突然出现了以下错误 错误代码是: Gen <Integer ,String> a = new Gen <Integer, String& ...
- django中向用户发送邮件信息
发送邮件来让用户激活,因此,邮件中需要包含用户信息.但用户信息需要加密才可以.因此加密采用的是itsdangerous中的TimedJSONWebSignatureSerializer. 参考链接:h ...
- mlsql 基本操作
数据库的操作: 1.创建 create databases python_test_01(库名,自定义)chaeset = utf8; 2.删除 drop database python_test_0 ...
- hive数据导出到本地目录 抛异常
经过反复试验,最终重启hdfs和hive解决问题 hive> insert overwrite local directory '/Users/wooluwalker/Desktop/' sel ...
- win7共享打印机如何设置,xp系统如何连接共享打印机。
一.xp如何连接win7共享打印机——连接win7共享打印机出现“禁用当前的账户”怎么办 保证xp和win7在同一局域网内.然后在xp电脑中打开[运行],输入win7电脑的ip地址.比如,我的办公 ...
- vue学习笔记——组件的优化
Vue 应用性能优化指南 1 给组件定义name,然后在同级目录新建index文件: import Count from './count.vue' export Count; 2 优化大数据的列表 ...
- php读取不到指定的php.ini配置
新建启动脚本 启动时指定路径 解决方案一:修改 /etc/init.d/php-fpm 文件 1 # 在这行命令上添加 指定的配置路径 2 php_opts="--fpm-config $ ...
- JS 点击复制
一.原理分析 浏览器提供了 copy 命令 ,可以复制选中的内容 document.execCommand("copy") 如果是输入框,可以通过 select() 方法,选中输入 ...