• C#设计模式——工厂方法模式(Factory Method Pattern)


    一、概述
    在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?如何提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就可以用到工厂方法模式了。
    二、工厂方法模式
    工厂方法模式定义了一个用于创建对象的接口,让其子类决定实例化哪一个对象。使一个对象的创建工作延迟到其子类。
    工厂方法模式的结构图如下:

    Product定义了工厂方法所创建的对象的接口。
    ConcreteProduct实现Product接口, 定义了具体对象。
    Creator定义了具体对象创建的工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象
    ConcreteCreator实现Creator接口,重定义工厂方法以返回一个ConcreteProduct实例。
    三、示例
    我们以实现一个文档处理系统来看一下工厂方法模式的应用。
    首先定义文档类型的接口和两个具体的文档类型

     1     public interface IFile
    2 {
    3 void New();
    4 void Save();
    5 }
    6 public class DocFile : IFile
    7 {
    8 public void New()
    9 {
    10 Console.WriteLine("New Doc Create");
    11 }
    12 public void Save()
    13 {
    14 Console.WriteLine("Save Doc");
    15 }
    16 }
    17 public class TxtFile : IFile
    18 {
    19 public void New()
    20 {
    21 Console.WriteLine("New Txt Create");
    22 }
    23 public void Save()
    24 {
    25 Console.WriteLine("Save Txt");
    26 }
    27 }

    接着实现对象创建的工厂方法及具体文档的创建工厂

     1     interface IFileFactory
    2 {
    3 IFile Create();
    4 }
    5 public class DocFileFactory : IFileFactory
    6 {
    7 public IFile Create()
    8 {
    9 return new DocFile();
    10 }
    11 }
    12 public class TxtFileFactory : IFileFactory
    13 {
    14 public IFile Create()
    15 {
    16 return new TxtFile();
    17 }
    18 }

    最后看一下如何调用

     1     static void Main(string[] args)
    2 {
    3 IFile docFile = (new DocFileFactory()).Create();
    4 docFile.New();
    5 docFile.Save();
    6 IFile txtFile = (new TxtFileFactory()).Create();
    7 txtFile.New();
    8 txtFile.Save();
    9 Console.ReadLine();
    10 }





  • 相关阅读:
    CF1343E-Weights Distributing (最短路)
    科大讯飞杯-日期小助手(补)
    网络15软工个人作业5——软件工程总结
    软工网络15个人作业4——alpha阶段个人总结
    软件工程网络15个人作业3——案例分析
    软工网络15结对编程练习
    软工网络15个人阅读作业2——提问题
    软件工程网络15个人阅读作业1(201521123052 蓝锦明)
    Java课程设计 购物车系统(个人博客) 201521123052 蓝锦明
    201521123052 《Java程序设计》 第14周学习总结
  • 原文地址:https://www.cnblogs.com/saville/p/2398218.html
Copyright © 2020-2023  润新知