zoukankan      html  css  js  c++  java
  • 温故而知新:设计模式之工厂模式(Factory)

    工厂模式:个人理解为主要用于创建"同一系列"的N个对象实例。(注意这里"同一系列"指这一系列对象均继承于某一个抽象类或均实现了某一个接口)

    举例:(仍然来自李建忠老师webcast中的实例,不过做了些简化)

    某汽车生产商需要对生产出来的“某一品牌”的不同型号汽车进行测试,于是写一套测试程序,这里的品牌我们就用Audi(奥迪)吧,比如现在测试的是A5,过一阵可能A6要下线,另外A7,A8...也都在研究中...

    如何让这一套测试程序能应对各种型号的变化,而不是每次出来一款新型号的奥迪,就要发布一个版本?

    寻找变化点:变化的只是型号,但同一品牌的测试方式却相对不变(比如商务车通常主要侧重于测试商务实用性,跑车通常主要侧重于测试引擎性能,环保概念车主要测试能耗,豪华车侧重于内部装饰...),所以只需要把同一类测试方法提出来即可

     1 using System;
     2 
     3 namespace FactoryMethod
     4 {
     5     class Program
     6     {
     7         static void Main(string[] args)
     8         {
     9             AudiFactory f = new A5Factory();//利用反射可完全解除 客户程序 与具体类型的依赖,此处略过...
    10             Audi a =  f.CreateAudi();
    11             a.Test();
    12             Console.ReadKey();
    13         }
    14     }
    15 
    16     #region "接口/抽象"部分
    17     public abstract class Audi 
    18     {
    19         public abstract void Test();
    20     }  
    21 
    22 
    23     public abstract class AudiFactory 
    24     {
    25         public abstract Audi CreateAudi();
    26     }
    27     #endregion
    28 
    29 
    30     #region 实现部分
    31     public class A5Factory : AudiFactory 
    32     {
    33         public override Audi CreateAudi()
    34         {
    35             return new AudiA5();
    36         } 
    37     }
    38 
    39     public class A6Factory : AudiFactory
    40     {
    41         public override Audi CreateAudi()
    42         {
    43             return new AudiA6();
    44         }
    45     } 
    46 
    47     public class AudiA5 : Audi
    48     {
    49         public override void Test()
    50         {
    51             Console.WriteLine("Audi A5 测试完成!");
    52         }
    53     }
    54 
    55     public class AudiA6 : Audi
    56     {
    57         public override void Test()
    58         {
    59             Console.WriteLine("Audi A6 测试完成!");
    60         }
    61     }
    62     #endregion
    63 }
    64 

    这里再给出一个计算器的工厂模式示例(来自大话模式中的示例) https://files.cnblogs.com/yjmyzz/Calculator_FactoryMethod.rar 

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    移动端的爬坑路
    判断设备ios或android以及判断是否是微信内置浏览器
    使用vue directive 写好的滑动删除功能
    不用ajax,使用json数据渲染商品的方法
    vue中使用swiper的一些坑
    vue的自定义指令的坑
    better-score获取滑动距离的坑
    linux命令
    关于打印
    数据可视化
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1653420.html
Copyright © 2011-2022 走看看