代码之家  ›  专栏  ›  技术社区  ›  Nathan W

包装器库-生成器与带POCO的工厂

  •  0
  • Nathan W  · 技术社区  · 16 年前

    public class COMPoint
    {
        internal COMPoint(MyComObject comobject) {}
        public SomeCollection Nodes {get; set;} 
    }
    

    现在为了在我的COM对象中创建point对象,我需要调用一些字符串命令,而这正是我在决定指向何处时遇到的问题。

    现在我考虑使用一个具有属性的POCO,然后将其传递到某种工厂方法中,类似这样的方法;

    public class Point
    {
       public SomeCollection Nodes {get;set;}
    }
    
    public class GeometryFactory
    {
       public GeometryFactory(MyComObject comobject) {}
       public CreateCOMPointFrom(Point point)
       {
          // Do COM work here and return new COMPoint.
       }
    }
    

    或者使用生成器模式,例如:

    public class COMPoint
    {
        internal COMPoint(MyComObject comobject) {}
        public SomeCollection Nodes {get; set;} 
    
       public class Builder
       {
          public Builder(MyComObject comobject) {}
          public SomeCollection Nodes {get; set;}
          public COMPoint Create()
          {
             // Do COM work here and return new COMPoint.
          }
       }
    }
    

    或两者的结合:

    public class COMPoint
    {
        internal COMPoint(MyComObject comobject) {}
        public SomeCollection Nodes {get; set;} 
    
       public class Builder
       {
          public Builder(MyComObject comobject) {}
          public SomeCollection Nodes {get; set;}
          public COMPoint Create()
          {
             // Do COM work here and return new COMPoint.
          }
    
          public COMPoint CreateFrom(Point point)
          {
             // Set builder properties and call.
             this.Create();
          }
       }
    }
    

    Point point = new Point()
    point.Nodes <- Set nodes
    

    将它传递给他们的代码,然后构造它,并返回返回到COM对象的代码。

    我担心,如果我有两个不同的点对象,它可能会混淆用户,但再次建设者模式是不是真的很友好,嗯,怎么办。

    当然,point对象是我必须创建的最简单的对象,还有很多更复杂的对象。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Tiger    16 年前

    我相信您可以将Builder和Factory模式结合起来,然后您可以在中应用“unifiedinterfaceswithadapter” Refactoring Pattern 书。如果我走错方向,请纠正我。如前所述,您将基于点(?)创建复杂的不同对象。

    您可以将AbstractBuilder创建为顶级生成器,AbstractBuilder的每个子类都将负责创建具有公共接口(可能是COMPoint接口)的复杂对象。

    之后,可以应用工厂模式从子类AbstractBuilder创建对象。如果要创建不同的对象,则每个点对象可以是COMPoint接口或实现不同接口的适配器对象。

    希望对你有帮助。

    推荐文章