如何应用抽象工厂模式?

时间:2010-05-31 13:21:42

标签: design-patterns

我是设计模式的新手,我在这里有一个场景。我不确定如何实现模式。

  1. 我们有多家供应商Philips,Onida等
  2. 每个供应商(philips,onida等)可能有不同类型的产品,即等离子或普通电视。
  3. 我想要使用抽象工厂模式的每个供应商的特定产品。

    到目前为止我的实施:

    public enum TvType
    {
        Samsung = 0, LG = 1, Philips = 2, Sony = 3
    }
    
    public enum Product
    {
        Plasma = 0, NormalTV = 1
    }
    

    返回每个产品的每个供应商的具体类以及包含ProductInfo的接口,即如果供应商是 那么它必须具有产品。

2 个答案:

答案 0 :(得分:0)

在伪代码中,它可能是这样的:

interface TvFactory {
  NormalTelevision createNormalTv();
  PlasmaTelevision createPlasmaTv();
}

class PhilipsTvFactory implements TvFactory {
  public NormalTelevision createNormalTv() {
    return new PhilipsNormalTelevision();
  }
  public PlasmaTelevision createPlasmaTv() {
    return new PhilipsPlasmaTelevision();
  }
}

class OnidaTvFactory implements TvFactory {
  public NormalTelevision createNormalTv() {
    return new OnidaNormalTelevision();
  }
  public PlasmaTelevision createPlasmaTv() {
    return new OnidaPlasmaTelevision();
  }
}

// similarly for other vendors...

...
// decides - maybe based on config - which factory to use
TvFactory factory = loadTvFactory();
Television myTv = factory.createPlasmaTv();

答案 1 :(得分:0)

枚举是邪恶的。用接口替换它们:

public interface IVendor { /*...*/ }

然后,您可以为每个供应商提供IVender的具体实现。

public class Samsung : IVendor { /*...*/ }

public class Philips : IVendor { /*...*/ }

public class Sony : IVendor { /*...*/ }

我不清楚为什么你会问抽象工厂,或者你想要做什么......