参照:http://www.cnblogs.com/zery/p/3599491.html

《----------工厂模式----------》

用户使用某一个类去新建一个实例的时候,并不用关心具体的实现过程,只调用实例的方法就好。

如上图所示,1. 有一个鸟类,定义了两个方法:羽毛和翅膀;2. 继承该鸟类实现了三个新的具体鸟类,分别有自己的特点;3. 设计一个工厂类,可以根据传入的名字参数,具体实例化不同的鸟类; 4. 客户端在调用鸟类的时候,只需要使用名字调用工厂类方法就可以实现,不管具体鸟类的实现过程;

/// <summary>/// 所有鸟类的抽象基类/// </summary>public abstract class Bird{public virtual void Feather(){Console.Write("我有羽毛了\r\n");}public virtual void Wing(){Console.Write("我有翅膀了\r\n");}}//老鹰类--也是鸟类class Eagle:Bird{public override void Feather(){base.Feather();}public override void Wing(){Console.Write("我是老鹰我的翅膀很宽阔!\r\n");}}//鸵鸟类
public class Ostrich : Bird{public override void Feather(){base.Feather();}public override void Wing(){Console.Write("我是驼鸟有翅膀也不能飞!\r\n");}}//麻雀类
class Sparrow:Bird{public override void Feather(){Console.Write("我是麻雀我的羽毛是麻色的!\r\n");}public override void Wing(){base.Wing();}}//工厂类,用于生成鸟
public  class Factory{public static Bird CreateInstance(string birdType){Bird instance = null;switch (birdType){case "Ostrich":instance  =new Ostrich();break;case "Eagle":instance = new Eagle();break;case "Sparrow":instance = new Sparrow();break;}return instance;}}//客户端调用
class Program{static void Main(string[] args){Console.WriteLine("输入要生成鸟~~ Eagle Ostrich  Sparrow");string item = Console.ReadLine().Trim();Bird instance =  Factory.CreateInstance(item);instance.Feather();instance.Wing();Console.ReadLine();}}

  这样的设计过程非常的好,但是也不满足开闭原则,即在新增一个具体鸟类的时候,需要在工厂类中新增一个case。

  有没有更好的设计呢?

转载于:https://www.cnblogs.com/lxq0309/p/3642262.html

设计模式-工厂模式(二)相关推荐

  1. 设计模式——工厂模式(二)

    文章目录 工厂方法模式 1.1工厂方法模式概述 1.2工厂方法模式定义如下 1.3工厂方法模式要点 1.4设计步骤及代码示例 1.5工厂方法模式结构图中包含角色 1.6工厂方法模式的主要优点和缺点 1 ...

  2. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  3. Java设计模式-工厂模式(1)简单工厂模式

    Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...

  4. 设计模式(工厂模式)

    目录 一.概述 1.1 为什么会工厂模式 二. 简单工厂模式 2.1 简单工厂模式的类图 2.2 简单工厂模式示列 2.3 优缺点 三 .工厂方法 3.1 工厂方法模式解决和什么问题 3.2 工厂方法 ...

  5. 理解设计模式——工厂模式

    理解设计模式--工厂模式 定义 模式类型 调用方式 实现方法 简单工厂模式 设计结构 工厂模式 设计结构 抽象工厂模式 使用场景 定义 提供一个接口以创建一系列相关或互相依赖的对象,而无须指定它们具体 ...

  6. 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

    声明: 本博客参考C语言中文网:C语言中文网连接 主要记录学习以下内容: 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 每个大要点都主要包括以下两部分内容: (1)基本概念和模型结构(包括一些 ...

  7. PHP设计模式-工厂模式

    PHP设计模式-工厂模式 一.工厂模式概念 工厂模式,顾名思义,像工厂的流水线,固定的规格,固定的材料,做固定的事情. 工厂模式分为三种:简单工厂.工厂方法.抽象工厂 ,三种工厂的区别是,抽象工厂由多 ...

  8. Spring5设计模式- 工厂模式

    设计模式 - 工厂模式 --------------目录直通车------------- 设计模式 - 工厂模式 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 分为简单工厂模式.工厂方法模式. ...

  9. 设计模式——工厂模式(Factory Pattern)

    设计模式--工厂模式(Factory Pattern) 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式.该 ...

  10. 设计模式-工厂模式三部曲

    设计模式-工厂模式三部曲(转) 转自:http://www.cnblogs.com/holyknight-zld/category/402079.html 工厂模式三部曲之一_简单工厂模式 转自:ht ...

最新文章

  1. SublimeText3系列(1)-安装、设置、快捷键、常用插件
  2. python计角_最小角python算法
  3. 数据段描述符和代码段描述符(二)——《x86汇编语言:从实模式到保护模式》读书笔记11
  4. python算法与数据结构-选择排序算法
  5. js中call和apply的作用和用法
  6. es6新特性中...的用法
  7. Kettle 之 javascript字段数据处理
  8. 晚上睡觉的时候应该把wifi关掉吗?
  9. C#操作ini文件类
  10. java计算课程学分绩点_【Java爬虫】爬取南通大学教务系统成绩计算绩点
  11. FFmpeg发送流媒体的命令(UDP,RTP,RTMP)
  12. python numpy : list VS np.array
  13. mysql递归查询树
  14. 计算机网络 自顶向下方法
  15. STM32学习记录0010——TFTLCD液晶显示屏
  16. 18V降压3.3V的降压IC和LDO芯片方案,15V降压3.3V的降压IC和LDO芯片方案
  17. 加州圣塔克拉拉大学计算机专业,圣塔克拉拉大学在美国排位
  18. h5模型转化为pb模型,代码及排坑
  19. 计算机调出任务管理器的组合键是,调出任务管理器快捷键
  20. VTK:数据动画用法实战

热门文章

  1. MY_0001:添加命令到自定义工具栏
  2. leetcode个人题解——#18 4sums
  3. 【python】导入自定义模块
  4. C# - ZIP 压缩流
  5. httpclient请求服务的各种方法实例
  6. 6Lua元表和冒号 self
  7. myBatis + SpringMVC上传、下载文件
  8. [转]c# winform tcp connect timeout 连接超时设置
  9. copy 和 deepcopy的区别
  10. DOC命令大全--(转)