c#设计模式- Simple Factory模式(简单工厂)
2013-12-18 15:22
513 查看
所有的内容和程序都是按照参考文档自己动手做的
参考
http://www.cnblogs.com/zhenyulu/articles/36462.html http://wenku.baidu.com/view/2be23625af45b307e871978b.html
Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。
Simple Factory模式实际上不是GoF 23个设计模式中的一员。
抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。
具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,由具体类实现。
运行结果
1 可以看出 工厂类里面有个create方法,来帮助生成不同的产品。
而客户端调用的时候不用过多的去考虑如何实现的。
2 定义产品的抽象类,所有的产品都继承这个抽象类。
毕竟是工厂的一种,试用简单逻辑下面的处理。有工厂的判断逻辑,可以叫客户端简单。
缺点:
难以修改和扩展,如果需要增加新的产品类,需要修改工厂类本身。
简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。
个人感觉简单工厂试用开始设计很全面,基本不用扩展的简单程序。试用初期需求可以穷举各种情况。
参考
http://www.cnblogs.com/zhenyulu/articles/36462.html http://wenku.baidu.com/view/2be23625af45b307e871978b.html
一 简单工厂
简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。
Simple Factory模式实际上不是GoF 23个设计模式中的一员。
二 简单工厂结构
工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。
具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,由具体类实现。
三 举例
一个简单工厂的例子using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace FactorySimple { public enum LightType { Bulb, Tube, } #region Class1 public abstract class Light { public abstract void TurnOn(); public abstract void TurnOff(); } public class BulbLight : Light { public override void TurnOn() { Console.WriteLine("BulbLight is turn on"); } public override void TurnOff() { Console.WriteLine("BulbLight is turn off"); } } public class TubeLight : Light { public override void TurnOn() { Console.WriteLine("TubeLight is turn on"); } public override void TurnOff() { Console.WriteLine("TubeLight is turn off"); } } public class LightSimpleFactory { public Light Create(LightType type) { switch (type) { case LightType.Bulb: return new BulbLight(); case LightType.Tube: return new TubeLight(); default: return null; } } } public class Client { static void Main(string[] args) { LightSimpleFactory lightFactory = new LightSimpleFactory(); Light l1 = lightFactory.Create(LightType.Bulb); l1.TurnOn(); l1.TurnOff(); Console.WriteLine("-----------------------"); Light l2 = lightFactory.Create(LightType.Tube); l2.TurnOn(); l2.TurnOff(); } } #endregion Class1 }
运行结果
1 可以看出 工厂类里面有个create方法,来帮助生成不同的产品。
而客户端调用的时候不用过多的去考虑如何实现的。
2 定义产品的抽象类,所有的产品都继承这个抽象类。
四 简单工厂的改变
除了上面的用法外,在有些情况下Simple Factory可以由抽象产品角色扮演,一个抽象产品类同时是子类的工厂。using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace FactorySimple { public enum LightType { Bulb, Tube, } #region Class2 public class Light { public virtual void TurnOn() { } public virtual void TurnOff() { } public static Light Create(LightType type) { switch (type) { case LightType.Bulb: return new BulbLight(); case LightType.Tube: return new TubeLight(); default: return null; } } } public class BulbLight : Light { public override void TurnOn() { Console.WriteLine("Bulb Light is Turned on"); } public override void TurnOff() { Console.WriteLine("Bulb Light is Turned off"); } } public class TubeLight : Light { public override void TurnOn() { Console.WriteLine("Tube Light is Turned on"); } public override void TurnOff() { Console.WriteLine("Tube Light is Turned off"); } } public class Client { public static void Main() { Light l = Light.Create(LightType.Bulb); l.TurnOn(); l.TurnOff(); Console.WriteLine("-----------------"); l = Light.Create(LightType.Tube); l.TurnOn(); l.TurnOff(); } } #endregion Class2 }
五 特点
优点:毕竟是工厂的一种,试用简单逻辑下面的处理。有工厂的判断逻辑,可以叫客户端简单。
缺点:
难以修改和扩展,如果需要增加新的产品类,需要修改工厂类本身。
简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。
个人感觉简单工厂试用开始设计很全面,基本不用扩展的简单程序。试用初期需求可以穷举各种情况。
相关文章推荐
- C#设计模式(二)简单工厂模式
- C#设计模式之简单工厂
- 设计模式学习(四): 1.简单工厂 (附C#实现)
- [C#]设计模式-简单工厂-创建型模式
- C#设计模式---简单工厂
- C#设计模式之简单工厂模式
- C#设计模式之简单工厂
- C#设计模式学习笔记---简单工厂模式
- C#简单工厂模式——初遇GoF设计模式
- 201802121524->深入浅出设计模式:c#简单工厂模式
- C#设计模式--简单工厂模式
- 设计模式(C#版)--简单工厂模式
- C#设计模式--简单工厂模式
- C#基础:抽象类和抽象方法实现多态以及简单工厂设计模式的语法
- C# 设计模式巩固 - 简单工厂模式
- C#设计模式之工厂模式(Factory)--01 简单工厂(Simple Factory)
- C# 设计模式之简单工厂模式
- C#简单工厂设计模式
- c#设计模式之简单工厂模式
- 转:C#设计模式之简单工厂篇