前言;工厂方法模式又叫做工厂模式,它是23个设计模式中的一个,它解决的还是在软件设计中创建对象的问题,它可以更好的解决用户需求的变化.

问题;在简单工厂模式中,我们将实例化的对象全部放于Factory.cs(工厂类),在我们的预知下我们可以实例化对象,但是我们的预知是有限的,而客户的需求是无限的,这样就出现了问题,一但客户的需求过于复杂,我们就要修改源码了,这是设计模式不允许的.

定义:在工厂模式中,父类负责定义创建对象的接口,子类负责new具体对象。

现实中的例子:我们举一个例子,这个例子和简单工厂的例子有些不同。

  据说清朝有个皇帝,它非常奢侈,每个衣服都有一个宫女负责,这样一来,每增加一种衣服,就得多出一个宫女,但她们各付其职,互不影响。

分析:实现的功能,可以根据皇帝的需求,创建宫女去拿所对应的衣服,如果皇帝太奢侈,这种衣服还没有,只需要添加一个宫女就可以满足他的需求了,每个宫女只要有一种衣服即可(高内聚),要增加衣服,对于原来宫女和衣服来说,谁都不影响谁。

商品系列

商品接口ICoat.cs

public interface ICoat
{
void ShowCoat();
}

具体商品:商务上衣

 public class BusinessCoat : ICoat
{
public void ShowCoat()
{
Console.Write("这件是商务上衣");
//throw new NotImplementedException();
}
}

具体商品:时尚上衣

 public class BusinessFactory : IFactory
{
public ICoat CreateCoat()
{
return new BusinessCoat();
///throw new NotImplementedException();
}
}

 

下面是工厂系列

总厂房:

public interface IFactory
{
ICoat CreateCoat();
}

时尚上衣工厂

public class FashionFactory : IFactory
{
public ICoat CreateCoat()
{
return new FashionCoat();
}
}

商务上衣工厂

public class BusinessFactory : IFactory
{
public ICoat CreateCoat()
{
return new BusinessCoat();
///throw new NotImplementedException();
}
}

皇帝:

static void Main(string[] args)
{
BusinessCoat coat = new BusinessCoat();
coat.ShowCoat();
Console.ReadLine();
}
 
架构图:

 
工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”。正如上面所说,这样便分担了对象承受的压力;而且这样使得结构变得灵活 起来——当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成,那么就可以被客户使用,而不必去修改任何已有的代 码。可以看出工厂角色的结构也是符合开闭原则的!
 
缺点:添加一个产品就要添加一个工厂类,这使程序的架构非常负责,从而使系统阅读起开非常困难。

今天俺要说一说工厂方法模式(Factory)的更多相关文章

  1. 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)

    原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...

  2. 【设计模式】工厂方法模式 Factory Method Pattern

    在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...

  3. 工厂方法模式-Factory Method(Java实现)

    工厂方法模式-Factory Method 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法让实例化的具体内容交给子类工厂来进行. 本文中的例子是这样的. 生产一个身份证, ...

  4. 二十四种设计模式:工厂方法模式(Factory Method Pattern)

    工厂方法模式(Factory Method Pattern) 介绍定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 示例有SqlMes ...

  5. 设计模式-03工厂方法模式(Factory Method Pattern)

    插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...

  6. IOS设计模式浅析之工厂方法模式(Factory Method)

    概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口. 如何隔离出这个易变对象的变化,使得系统中“其它依赖该对象的对 ...

  7. C#设计模式——工厂方法模式(Factory Method Pattern)

    一.概述在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口.如何应对这种变化?如何提供一种封装机制来隔离出“这个易变对象 ...

  8. 六个创建模式之工厂方法模式(Factory Method Pattern)

    问题: 在使用简单工厂模式的时候,如果添加新的产品类,则必需修改工厂类,违反了开闭原则. 定义: 定义一个用于创建对象的接口,让子类决定具体实例化哪个产品类.此时工厂和产品都具有相同的继承结构,抽象产 ...

  9. 设计模式之 - 工厂方法模式 (Factory Method design pattern)

    1. 模式意图:  定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 2. 别名(Virtual Constructor) 3. 结构 4. 工厂方法模式C ...

随机推荐

  1. 2018-2019-2 20165319 《网络对抗技术》 Exp5:MSF基础应用

    实验内容 metasploit中有六个模块分别是 渗透攻击模块(Exploit Modules) 辅助模块(Auxiliary Modules 攻击载荷(Payload Modules) 空字段模块( ...

  2. 福州大学软件工程1916|W班 第6次作业成绩排名

    作业链接 团队第三次-项目原型设计 评分细则 博客评分标准 在随笔开头,备注小组同学的学号.(1') 文字准确.样式清晰.图文并茂.字数在1000字左右.(10') 原型模型必须采用专用的原型模型设计 ...

  3. <玩转Django2.0>读书笔记:邮件和分页

    1. 发送邮件 # settings.py设置 # 邮箱设置 EMAIL_USE_SSL = True # 邮件服务器 EMAIL_HOST = 'smtp.qq.com' # 邮件服务端口 EMAI ...

  4. Spring Cloud项目MVN编译 -- Non-resolvable import POM

    最近利用闲余时间,打算搭建一套基于Spring Cloud G版的微服务架构(Spring boot 2.1.0),一顿操作之后,IDEA也没有提示什么错误,自认为微服务搭建完毕.启动项目前,习惯性的 ...

  5. C# 显示纯文本对齐封装(控制显示字体长度)

    坑: 用户在写多行的纯文本上来了一个对齐的表格..如下: 原因:不同的字体下,中文,英文大写,英文小写,字符,尤其是空格..字体占用的长度是不一样的,然后显示出来就是乱的.. 然而客户要求在不同的字体 ...

  6. 信息学奥赛辅导经验谈 & 问题教学法中的学生思维能力培养

    转载来自朱全民名师工作室 信息学奥赛辅导经验谈 全国青少年信息学奥林匹克分区竞赛(简称NOI)是经中国科协.国家教育部批准,由中国计算机学会主办的一项全国性的青少年学科竞赛活动.随着信息学奥林匹克竞赛 ...

  7. css3 图片阴影

    box-shadow:1px 2px 4px #999999; 效果:

  8. TypeScript-封装

    class People { private _name: string; age: number; print() { return this._name + ":" + thi ...

  9. github错误:fatal: remote origin already exists.

    原文链接:http://blog.csdn.net/dengjianqiang2011/article/details/9260435 如果输入$ Git remote add origin git@ ...

  10. hashlib模块,shutil,模块 ,,xml 文件解析,configparser,模块,类,什么是类

    1 什么是hash hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值 如果把hash算法比喻为一座工厂 那传给hash算法的内容就是原材料 生成的hash值就是生产出的产品 2.为 ...