定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例话延迟到子类。
                                                            ———《设计模式》GoF

     在接口IDAL层定义一个接口,该接口中方法表示发送不同短信消息。
Factory Method 工厂方法模式(创建型模式) //定义一个接口
Factory Method 工厂方法模式(创建型模式)
    public interface IMessage
    }
     
     在SERVER层实现IDAL的接口,一个用来发送天气预报短信,一个用来发送新闻短信。
Factory Method 工厂方法模式(创建型模式)public class WeatherSMS : IMessage
    }
Factory Method 工厂方法模式(创建型模式) public class NewsSMS : IMessage
    }

      创建IDAL的工厂:
Factory Method 工厂方法模式(创建型模式)public interface IMessageFactory
    }
      
      实现DAL的工厂:
Factory Method 工厂方法模式(创建型模式)static class MessageUtility
    }
     
    业务BLL层的方法;
     发送新闻短信:
Factory Method 工厂方法模式(创建型模式)public class BussinessNews
    }
     发送天气预报短信:
Factory Method 工厂方法模式(创建型模式)public class BussinessWeather
    }

     实现:
class Program
    {
        
static void Main(string[] args)
        {
            BussinessNews bn 
= new BussinessNews();
            bn.send(
"新闻短信发送成功!");

            BussinessWeather bw 
= new BussinessWeather();
            bw.send(
"天气预报短信发送成功!");
        }
    }

也可以不创建IDAL工厂模型来实现,可以使用反射技术来实现在SERVER层实现IDAL的接口,使用反射减少了很多代码,但是程序的效率会有所下降。

 反射介绍:Assembly类是在System.Reflection命名空间中定义的,他允许访问给程序集的元数据,它也包含可以加载和执行程序集(假定该程序集是可执行的)的方法。与Type类一样,Assembly类包含非常多的方法和属性。在使用Assembly实例做一些工作前,需要把相应的程序集加载到运行过程中,为此,可以使用静态成员Assembly.Load()或者Assembly.LoadFrom()。这两个方法的区别是Load()参数是程序集的名称,运行库会在各个位置上搜索该程序集,这些位置包括本地目录和全局程序集高速缓存。而LoadFrom()的参数是程序集的完整路径名,不会在其他位置搜索该程序集。

反射代码:
Factory Method 工厂方法模式(创建型模式)using System;
Factory Method 工厂方法模式(创建型模式)
using System.Collections.Generic;
Factory Method 工厂方法模式(创建型模式)
using System.Text;
Factory Method 工厂方法模式(创建型模式)
using System.Reflection;
Factory Method 工厂方法模式(创建型模式)
Factory Method 工厂方法模式(创建型模式)
namespace ClassLibrary1

那么业务类BLL修改为:
发送新闻的业务类
Factory Method 工厂方法模式(创建型模式)public class BussinessNews
    }
  发送天气预报的业务类
Factory Method 工厂方法模式(创建型模式)public class BussinessWeather
    }

实现:
Factory Method 工厂方法模式(创建型模式) class Program
    }


     

相关文章: