简单工厂,代码:

public interface ISpeak
{
public void Say();
} public class Hello : ISpeak
{ public void Say()
{
//throw new NotImplementedException();
Console.WriteLine("Hello");
}
} public class Bye : ISpeak
{
public void Say()
{
Console.WriteLine("Bye");
}
} public class Factory
{
public static ISpeak Creator(string type)
{
switch (type)
{
case "hellow":
return new Hello();
case "bye":
return new Bye();
default:
return null;
}
}
}

  毕竟是简单工厂,思路相对简单,将实例的创建都放在一个地方,根据传入的参数不同,生成不同的对象给对方。

  

  工厂方法:还是使用上面的打招呼类

    public interface IFactory
{
public ISpeak Creator();
} public class HellowFactory : IFactory
{
public override ISpeak Creator()
{
return new Hello();
}
} public class ByeFactory : IFactory
{
public override ISpeak Creator()
{
return new Bye();
}
}

  这里就要注意了,区别很容易就看得出来,简单工厂里提供了一个静态的方法,随时可以供提供者访问,而工厂方法则是将工厂类抽象了出来,给了一个接口,生成Hellow或者Bye需要通过对应的工厂来生产,这样如果加一个早上好就需要新创建一个工厂类了,似乎越来越麻烦了,但是实际我们在写程序的时候不可能是这么简单的,牵涉到不同需求时,如果需要用到上面的单例模式时,我们就可以把新的单例逻辑写在新的工厂类中。但工厂方法模式确实会造成过多的工厂类,所以可以考虑将简单工厂和工厂方法结合起来。也有很多人把这两个模式合成工厂方法模式,认为简单工厂是工厂方法的一种。

最新文章

  1. CodeLite的姿势
  2. nodejs框架express实现登录
  3. [TypeScript] 建置输出单一JavaScript档案(.js)与Declaration档案(.d.ts)
  4. URAL 2014 Zhenya moves from parents --线段树
  5. 第七篇 SQL Server代理作业活动监视器
  6. 团队开发——第一篇scrum报告
  7. C 语言学习guideline
  8. POJ2402 Palindrome Numbers 回文数
  9. webapp思路和rem适配极其viewport
  10. WPF Mahapps.Metro 设置主题样式
  11. Android中sharedPreference的简单使用
  12. onbeforepaste
  13. 模拟产生CBC LATCH与buffer busy wait等待事件
  14. 【Leetcode】Pascal's Triangle II
  15. python基础知识——字符串详解
  16. dubbo源码—dubbo简介
  17. 在webpack3里使用uglifyjs
  18. 8、16、32-BIT系列单片机区别与特点
  19. Codeforces Round #443 (Div. 1) B. Teams Formation
  20. 转载 Python 正则表达式入门(中级篇)

热门文章

  1. SQL Server 2014 新特性——内存数据库
  2. Android业务组件化之现状分析与探讨
  3. Java中Comparable与Comparator的区别
  4. 前端制作动画的几种方式(css3,js)
  5. Autofac - 属性注入
  6. Linux杀死进程,查看进程
  7. 设计模式之单例模式(Singleton)
  8. 解决:win10_x64 VMware Workstation and Hyper-V are not compatible. Remove the Hyper-V role from the system before running VMware Workstation
  9. 将MPM雪模拟移植到Maya
  10. spring boot1