首页 > 代码库 > 设计模式学习笔记-工厂模式
设计模式学习笔记-工厂模式
一、概述
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法(Factory Method)使一个类的实例化延迟到其子类;
2、模式中的角色
Product(Map):定义工厂方法所创建的对象的接口。
ConcreteProduct(BaiduMap、GaodeMap):具体Product,实现Product接口。
Creator(IMapFactory):声明工厂方法,该方法返回一个Product类型的对象。
ConcreteCreator(BaiduMapFactory、GaodeMapFactory):重定义工厂方法以返回一个ConcreteProduct实例。
3、UML类图
4、代码实现
public class Map { /// <summary> /// 地图名称 /// </summary> public string Name { get; set; } /// <summary> /// 操作 /// </summary> public virtual void Print() { } } public class GaodeMap : Map { public override void Print() { Console.WriteLine("选择了{0}地图",Name); } } public class BaiduMap : Map { public override void Print() { Console.WriteLine("选择了{0}地图", Name); } } /// <summary> /// 工厂构造接口 /// </summary> public interface IMapFactory { /// <summary> /// 返回父类 /// </summary> /// <returns></returns> Map CreateMap(); } /// <summary> /// 实现类 /// </summary> public class BaiduMapFactory : IMapFactory { /// <summary> /// 返回具体类 /// </summary> /// <returns></returns> public Map CreateMap() { return new BaiduMap(); } } /// <summary> /// 实现类 /// </summary> public class GaodeMapFactory : IMapFactory { /// <summary> /// 返回具体类 /// </summary> /// <returns></returns> public Map CreateMap() { return new GaodeMap(); } } static void Main(string[] args) { #region 工厂模式实现 IMapFactory mapFactory = new BaiduMapFactory(); Map map = mapFactory.CreateMap(); map.Name = "百度"; map.Print(); mapFactory = new GaodeMapFactory(); map = mapFactory.CreateMap(); map.Name = "高德"; map.Print(); #endregion Console.ReadLine(); }
4、应用场景
4.1:当一个类不知道它所必须创建的对象的类的时候;
4.2:当一个类希望由它子类来指定它所创建的对象的时候。
4.3:当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候;
参考书籍《设计模式-可复用面向对象软件的基础》
设计模式学习笔记-工厂模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。