今天俺要说一说工厂方法模式(Factory)
前言;工厂方法模式又叫做工厂模式,它是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)的更多相关文章
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- 工厂方法模式-Factory Method(Java实现)
工厂方法模式-Factory Method 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法让实例化的具体内容交给子类工厂来进行. 本文中的例子是这样的. 生产一个身份证, ...
- 二十四种设计模式:工厂方法模式(Factory Method Pattern)
工厂方法模式(Factory Method Pattern) 介绍定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 示例有SqlMes ...
- 设计模式-03工厂方法模式(Factory Method Pattern)
插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...
- IOS设计模式浅析之工厂方法模式(Factory Method)
概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口. 如何隔离出这个易变对象的变化,使得系统中“其它依赖该对象的对 ...
- C#设计模式——工厂方法模式(Factory Method Pattern)
一.概述在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口.如何应对这种变化?如何提供一种封装机制来隔离出“这个易变对象 ...
- 六个创建模式之工厂方法模式(Factory Method Pattern)
问题: 在使用简单工厂模式的时候,如果添加新的产品类,则必需修改工厂类,违反了开闭原则. 定义: 定义一个用于创建对象的接口,让子类决定具体实例化哪个产品类.此时工厂和产品都具有相同的继承结构,抽象产 ...
- 设计模式之 - 工厂方法模式 (Factory Method design pattern)
1. 模式意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 2. 别名(Virtual Constructor) 3. 结构 4. 工厂方法模式C ...
随机推荐
- unity Camera第一人称移动,3中方法实现
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : ...
- 线程池ThreadPoolTaskExecutor配置说明
一般实际开发中经常用到多线程,所以需要使用线程池了, ThreadPoolTaskExecutor通常通过XML方式配置,或者通过Executors的工厂方法进行配置. XML方式配置代码如下:交给 ...
- TensorFlow之多核GPU的并行运算
tensorflow多GPU并行计算 TensorFlow可以利用GPU加速深度学习模型的训练过程,在这里介绍一下利用多个GPU或者机器时,TensorFlow是如何进行多GPU并行计算的. 首先,T ...
- idea使用阿里工具优化代码+阿里开发手册
idea安装工具 打开插件安装界面 File-Settings-Plugins-Browse repositories... 搜索Alibaba Java Coding Guidelines 进行安装 ...
- 使用HttpClient发送文件流到服务器端
适用场景:网络绝对路径的URL文件或图片,不存储到本地,转换成stream,直接使用HTTPClient传送到SpringBoot的服务端,将文件存储下来,并返回一个文件地址.目前分层架构的系统越来越 ...
- corel
corel CorelDRAW X6 Corel CorelCAD 2017 32位/64位破解版
- Typescript骚操作,在TS里面直接插入HTML
Typescript骚操作,在TS里面直接插入HTML,还有语法提示 先给大家看一个图 因为我不喜欢用很重的框架,主要是并非专业UI,但是偶尔会用到,还是觉得直接element组装受不了,想想能在ts ...
- 雕刻机制作 PCB 指南
之前使用过感光蓝油制作过 PCB,虽然感光法精度高,但个人制作耗时耗力,发给厂家周期又很长.看到国外的网友使用雕刻机制作 PCB 视频之后.几番周折之后还是成功了.有感于网上几乎没有一份完整的雕刻机 ...
- idhttp提交post带参数并带上cookie
有这么一个提交连接 http://www.XXXXXX.com/test.php?p1=411328&p2=1&d1=HeroSkinList 一共有三个参数[p1] [p2] [ ...
- echarts-for-react 从新渲染数据
<ReactEcharts option={option} notMerge={true} style={{height: '600px', width: '100%'}} className ...