模式应用 - 利用工厂模式制作自己的"小程序测试工厂"

在平时开发程序的过程中,自己经常会写一些控制台小程序进行测试某个功能,事后我们会寻找这些小程序,
如果不仔细管理,经常会找不到。
由于每个控制台小程序都有自己独立的 Main方法,所以我们不能把他们都放在一个Solution里面,这样
在编译整个项目的时候会通不过,但是又不想为每个小程序都单独建立一个项目,这样又太浪费,因为
每个都是一个非常简单的代码文件。
于是我想到了利用工厂模式,我是这样做的:

首先创建一个ITestCase接口,它有一个Run方法。

namespace SharpTrainer
{
    interface ITestCase
    {
        void Run();
    }
}

接着我们为我们的每个小程序建立自己的TestCase类,例如:
你可以这样做:
class TestCase1: ITestCase
{
      public void Run()
      {
            ....;
      }
}
class TestCase2: ITestCase
{
      public void Run()
      {
            ....;
      }
}

我举个我实际的TestCase如下:

using System;

namespace SharpTrainer
{
    class TestRefParam:ITestCase
    {
        public void Run()
        {
            string first = "first";
            string second = "second";

            Utility.Swap(ref first, ref second);

            System.Console.WriteLine(
                @"first = {0}, second = {1}",
                first, second);

            System.Console.ReadLine();
        }
    }
}

Utility类的代码如下:

namespace SharpTrainer
{
    public class Utility
    {
        public static void Swap(ref string first, ref string second)
        {
            string temp = first;
            first = second;
            second = temp;
        }
    }
}

接下来我们便要创建App配置文件,用于等下
根据 config 文件的设置用反射创建相应的 TestCase 类型实例返回.
App.Config代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="testAssembly" value="SharpTrainer"></add>
        <add key="testCaseName" value="TestRefParam"></add>
    </appSettings>
</configuration>

最后在Main方法中利用反射来运行我们的TestCase,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Reflection;
using System.Configuration;

namespace SharpTrainer
{
    class Program
    {
        static void Main(string[] args)
        {
            string AssemblyName = ConfigurationSettings.AppSettings["testAssembly"];
            string CaseName = ConfigurationSettings.AppSettings["testCaseName"];

            string className = AssemblyName + "." + CaseName;
            ITestCase testCase = (ITestCase)Assembly.Load(AssemblyName).CreateInstance(className);
            testCase.Run();
        }
    }
}

运行结果如下:
first = second, second = first

这样,以后我就可以不断地增加小程序测试用例类,每个TestCase类实现 ITestCase接口,而逻辑都写在
Run方法里。
我们要运行哪个 TestCase 只要将App.Config里testCaseName的键值改成相应的TestCase类名就好了。

以上就是我利用工厂模式实现的自己测试小程序的用例测试工厂。

时间: 2024-09-14 13:15:21

模式应用 - 利用工厂模式制作自己的"小程序测试工厂"的相关文章

抽象工厂模式

又碰到好文章了,忍不住就想转,这种风格幽默清新的文章很有借鉴意义.转自:http://www.cnblogs.com/cbf4life/archive/2009/12/23/1630612.html 抽象工厂模式 9.1 女娲的失误      我们在上一章节讲了女娲造人的故事.人是造出来了,世界也热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,哇K!忘记给人类定义性别了,那怎么办?抹掉重来,于是人类经过一次大洗礼,所有的人种都消

C# 设计模式----抽象工厂模式

原文地址:C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性.但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题,这是

《java与模式》----创建模式系列工厂模式、单态模式精讲

创建 创建模式-----Creation  Pattern 创建模式是对类实例化过程的抽象. 一些系统在创建对象的时候需要动态的决定怎样创建对象.创建哪些对象.以及如何组合,表示这些对象.创建模式描述了怎样构造和封装这些动态的决定. 创建模式又分类的创建模式和对象的创建模式. l         类的创建模式:类的创建模式使用继承关系,把类的创建延迟到子类,从而封装了客户端将得到哪些具体类的信息,并隐藏了这些类的实例是如何被创建的和放在一起的.. l         对象的创建模式:对象的创建模

C#抽象工厂模式的几种实现方法及比较

比较 利用设计模式可以使我们的代码更灵活,更容易扩展,更容易维护.各种面向对象的程序设计语言都提供了基本相同的机制:比如类.继承.派生.多态等等.但是又有各自的特色,C# 中的反射机制便是一个很重要的工具,好好地利用就可以在实际中发挥很大的作用. 我们来看一个例子: 我的程序中有需要一系列的对象,比如apple,orange-, 要想利用他们,我们就必须在程序中根据用户要求,然后一个个调用 new 操作符来生成他们,这样客户程序就要知道相应的类的信息,生成的代码显然不够灵活.我们可以在代码中不利

设计模式-简单工厂模式(SimpleFactory-C#)

设计 <java与模式> 上面那本书上的例子举的是园丁和果园的例子,学习设计模式最好在生活中自己找个例子 实践一下,下面是我自己的一个例子,是讲快餐店的例子,快餐店提供很多食物,比如 面条,米饭,面包.首先定义了一个Food接口,然后这些食物都从它来继承,定义了一个大厨 他包办所有食物的制作工作,这就是我所理解的简单工厂模式的概念,下面是源代码: using System; namespace SimpleFactoryPattern{ /// <summary> /// 简单工厂

解读设计模式----抽象工厂模式(AbstractFactory Pattern)

一.模式描述 我的程序中有需要一系列的对象,比如我们要吃一碗米饭(Rice),要喝一杯咖啡(Coffee)......,要想利用他们,我们就必须在程序中根据用户要求,然后一个个调用 new 操作符来生成他们,这样客户程序就要知道相应的类的信息,生成的代码显然不够灵活.那么我们可以在代码中不利用具体的类,而只是说明我们需要什么,然后就能够得到我们想要的对象呢? 这当然是可以的,根据GOF在<设计模式>一书里介绍,要创建对象这样的工作应该是属于创建型模式完成的.熟悉各种设计模式意图的朋友就会很快得

MVC架构模式与利用JAVABEAN分页

众所周知MVC不是设计模式,是一个比设计模式更大一点的模式,称作设计模式不合理,MVC模式应该叫架构模式,MVC里面用了许多小的模式,例如策略模式,组合模式,聚集模式,可以用到的模式有十几种之多,而设计模式里也就27种,MVC很重要,现在流行的STRUTS框架也是类似的实现,建议大家有时间可以研究下STRUTS,现在很多公司都开始使用这个框架来做大型的企业系统开发,STRUTS是APACHE的一个开源项目,所有资料都可以从APACHE网站得到.当然目前国内也有翻译了一些STRUTS文章,不过大都

JavaScript模式之工厂模式(Factory)应用介绍

工厂模式也是对象创建模式之一,它通常在类或类的静态方法中去实现.构造对象的一种方式是使用new操作符,但使用new时正是针对实现编程,会造成"耦合"问题,与具体的类关系紧密.导致代码更脆弱,缺乏弹性,在复杂逻辑的项目中建议是面向接口编程. 先看简单工厂模式 代码如下: Person(name, age) { var obj = {} obj.name = name obj.age = age return obj } var p1 = Person('jack', 25) var p2

[Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式

[Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式--建造者模式 引言 今天是冬至,去饺子馆吃饺子,看他们店里面的水饺种类挺多,在等待中,在想是不是可以用设计模式模拟一下,生产饺子的过程,正好最近也在看工厂模式,也就现学现卖了.当然,实现的方式很多,只是一个例子而已.祝大家冬至,多多吃水饺..... 对象创建的问题? 我们应该面向接口编程而不是面向实现编程,因