(抽象)工厂的另一种实现方式
2010-08-19 17:51
253 查看
工厂模式是在设计模式中比较容易理解和掌握的一种模式,其使用非常的普遍。在项目实践中个人对常用的工厂模式做了一个调整,整个实现有点像工厂模式和抽象工厂模式的混合体,这样做的好处在于结合工厂模式的易用和抽象工厂的灵活。具体的实现可能如下:
代码
1 IUnityContainer container;
2 [Test]
3 public void CalculateTest()
4 {
5 Setup();
6
7 var factoryMock = new Mock<IServiceFactory>();//Mock Factory
8 var calcMock = new Mock<ICalculateService>();//Mock Service
9 calcMock.Setup(c => c.Sum(It.IsAny<int>(), It.IsAny<int>())).Returns<int, int>((x, y) => x + y); //Mock Calculate Sum Method
10 factoryMock.Setup(c => c.GetService<ICalculateService>()).Returns(calcMock.Object); //Mock GetService<T> Method
11
12 container.RegisterInstance<IServiceFactory>(factoryMock.Object);//向容器中注入Mock的Factory
13
14 var calc = ServiceFactory.GetService<ICalculateService>();
15
16 Assert.IsNotNull(calc);
17 int a = 1;
18 int b = 2;
19 int experct = a + b;
20 int actual = calc.Sum(a, b);
21 Assert.IsTrue(experct == actual);
22 }
23
24 public void Setup()
25 {
26 container = new UnityContainer();
27 Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.Current = new UnityServiceLocator(container);
28 }
代码
1 IUnityContainer container;
2 [Test]
3 public void CalculateTest()
4 {
5 Setup();
6
7 var factoryMock = new Mock<IServiceFactory>();//Mock Factory
8 var calcMock = new Mock<ICalculateService>();//Mock Service
9 calcMock.Setup(c => c.Sum(It.IsAny<int>(), It.IsAny<int>())).Returns<int, int>((x, y) => x + y); //Mock Calculate Sum Method
10 factoryMock.Setup(c => c.GetService<ICalculateService>()).Returns(calcMock.Object); //Mock GetService<T> Method
11
12 container.RegisterInstance<IServiceFactory>(factoryMock.Object);//向容器中注入Mock的Factory
13
14 var calc = ServiceFactory.GetService<ICalculateService>();
15
16 Assert.IsNotNull(calc);
17 int a = 1;
18 int b = 2;
19 int experct = a + b;
20 int actual = calc.Sum(a, b);
21 Assert.IsTrue(experct == actual);
22 }
23
24 public void Setup()
25 {
26 container = new UnityContainer();
27 Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.Current = new UnityServiceLocator(container);
28 }
相关文章推荐
- PHP实现抽象工厂设计模式
- js slideToggle 的另一种实现方式,根据不同的状态添加选中颜色
- 抽象工厂方法C++实现
- 用C#实现的数据库抽象工厂
- .NET抽象工厂模式微理解--教你在项目中实现抽象工厂
- 用C#实现的数据库抽象工厂
- Decorator的另一种实现方式
- 抽象工厂简单实现
- iphone JB开发小记(二)插件界面的另一种实现方式
- 工厂模式实现方式、使用场景(包括基于反射的简单工厂模式)
- flask - wtf表单的实现和表单数据的获取 (另一种设置密钥的方式)
- [记]SAF 中抽象工厂的实现
- vb.net对抽象工厂的实现雏形
- WinCE5.0/6.0下命令行实现自动编译及另一种方式命令行编译
- CLI下另一种多进程实现方式----PCNTL
- 另一种方式实现京东顶部宽度全屏
- 另一种方式实现事务码SE16里的结果集修改
- 另一种方式实现事务码SE16里的结果集修改
- 新浪微博,腾讯微博另一种实现方式--pull
- 用C#实现的数据库抽象工厂 (转载自chrch)