如何用这个例子在WCF中实现工厂设计模式?

时间:2013-02-08 01:49:39

标签: c# asp.net .net wcf

我是WCF的新手,也是工厂设计模式的新手。在这个例子中,您如何实际实现工厂设计模式?

我在项目中创建了4个类additionsubtractionmultiplicationdivision,所以如果有办法调用这些类来执行除了在界面中进行计算会很棒。

提前致谢。

[OperationContract]
int Calculation(int value1, int value2, string calType);

public class Service1 : IService1
{
   public int Calculation(int value1, int value2, string calType) 
   {
        try {
            switch (calType)
            {
                case "addition":
                    return value1 + value2;

                case "subtraction":
                    return value1 - value2;

                case "multiplication":
                    return value1 * value2;
                case "division":
                    return value1 / value2;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        return 0;
     }
  }

1 个答案:

答案 0 :(得分:1)

好吧,让我们这样做,工厂模式在wcf

我们采用经典的形状示例,通过实现工厂模式,我们可以有效地减少服务类中的代码

只有形状工厂类需要在WCF服务类中,其余的可以有自己的业务类

1)创建一个界面

 public interface Shape {
 void  draw();
 }

2)创建像这样的类

public class Rectangle:Shape {

 public void draw() {
 print("Inside Rectangle::draw() method.");
  }
  }

公共类Square:Shape {

  public void draw() {
  print("Inside Square::draw() method.");
  }
  }

3)现在有一个服务工厂类

 [service contract]
  public class ShapeFactory {

 //use getShape method to get object of type shape 

  [operation contract]
  public Shape getShape(String shapeType){
  if(shapeType == null){
     return null;
  }     
  if(shapeType.equalsIgnoreCase("CIRCLE")){
     return new Circle();
  } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
     return new Rectangle();
  } else if(shapeType.equalsIgnoreCase("SQUARE")){
     return new Square();
  }
  return null;
  }
  }

并在您的服务接口

中公开此方法

4)让客户做其余的事情

代码是提供一般的想法

工厂模式可能在wcf中有很好的实现