代码之家  ›  专栏  ›  技术社区  ›  Marcelo Gimenes

在这种情况下,我需要一个带有抽象工厂的工厂吗?

  •  1
  • Marcelo Gimenes  · 技术社区  · 7 年前

    很抱歉,如果有人已经问过这个问题,但我没有发现有关此特定场景的问题:

    可能出现的一些示例:

    • 任何类型的状态1->第“1”页
    • 状态2,类型A->第“2A”页
    • B类状态2->第“2B”页
    • B类状态3->第“3X”页
    • 状态3,类型C->第“3C”页

    我考虑过实现一个工厂(每个状态都有一个开关盒),它将创建并返回一个抽象工厂的结果(每个类型都有一个工厂)。但是,我需要一些抽象类来解决这些工厂之间的“同一页”问题。

    我真的需要这个复杂的结构吗?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Gul Ershad    7 年前

    您希望根据类型的不同状态显示页面。因此,您的内部页面调用将根据您的上下文进行更改。所以,我建议你用 .

    根据我对您的问题陈述的理解,以下代码以C语言实现:

    public interface ISomeOperation
    {
        string DisplayPage(int status);
    }
    
    public class Type : ISomeOperation
    {
        public string DisplayPage(int status)
        {
            if (status == 1)
                return "1";
            return string.Empty;
        }
    }
    
    public class TypeA : ISomeOperation
    {
        public string DisplayPage(int status)
        {
            if (status == 2)
                return "2A";
            if (status == 3)
                return "3A";
            if (status == 4)
                return "4A";
            return string.Empty;
        }
    }
    
     public class TypeB: ISomeOperation
    {
        public string DisplayPage(int status)
        {
            if (status == 2)
                return "2B";
            if (status == 3)
                return "3B";
            if (status == 4)
                return "4B";
            return string.Empty;
        }
    }
    
    public class TypeC : ISomeOperation
    {
        public string DisplayPage(int status)
        {
            if (status == 2)
                return "2C";
            if (status == 3)
                return "3C";
            if (status == 4)
                return "4C";
            return string.Empty;
        }
    }
    
     public class OperationContext
    {
        private readonly ISomeOperation _iSomeOperation;
    
        public OperationContext(ISomeOperation someOperation)
        {
            _iSomeOperation = someOperation;
        }
    
        public string DisplayPageResult(int status)
        {
            return _iSomeOperation.DisplayPage(status);
        }
    }
    

    驾驶员代码:

     class Program
    {
        static void Main(string[] args)
        {
            var operationContext = new OperationContext(new Type());
            operationContext.DisplayPageResult(1);
    
             operationContext = new OperationContext(new TypeB());
            operationContext.DisplayPageResult(2);
            operationContext.DisplayPageResult(3);
            operationContext.DisplayPageResult(4);
    
            operationContext = new OperationContext(new TypeC());
            operationContext.DisplayPageResult(2);
            operationContext.DisplayPageResult(3);
            operationContext.DisplayPageResult(4);
        }
    }
    
        2
  •  0
  •   Kedar Tokekar    7 年前

    您的问题陈述要求似乎是 因此 策略 可能不太适合(关于没有状态变化的算法家族)。如果页面类型是有限的, 静态工厂 原型 (如果您需要克隆每个页面实例)将更适合(有两个选择键)。