设计模式学习笔记-工厂模式
Posted Rich.W
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式学习笔记-工厂模式相关的知识,希望对你有一定的参考价值。
一、概述
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法(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(); }
5、应用场景
5.1:当一个类不知道它所必须创建的对象的类的时候;
5.2:当一个类希望由它子类来指定它所创建的对象的时候。
5.3:当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候;
参考书籍《设计模式-可复用面向对象软件的基础》
以上是关于设计模式学习笔记-工厂模式的主要内容,如果未能解决你的问题,请参考以下文章
(C++设计模式) —— 常见设计模式学习笔记 - Factory模式(工厂)