首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何应用抽象工厂模式?

如何应用抽象工厂模式?
EN

Stack Overflow用户
提问于 2010-05-31 13:21:42
回答 2查看 392关注 0票数 0

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

  1. 我们有多家供应商--飞利浦、奥尼达等。
  2. (飞利浦、奥尼达等)可能有不同类型的产品,如等离子或普通电视。

我想要每个供应商的特定产品使用抽象工厂模式。

到目前为止,我的执行情况:

代码语言:javascript
复制
public enum TvType
{
    Samsung = 0, LG = 1, Philips = 2, Sony = 3
}

public enum Product
{
    Plasma = 0, NormalTV = 1
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-31 13:31:15

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

代码语言:javascript
复制
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();
票数 0
EN

Stack Overflow用户

发布于 2010-05-31 13:32:17

恩纳姆是邪恶的。将它们替换为接口:

代码语言:javascript
复制
public interface IVendor { /*...*/ }

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

代码语言:javascript
复制
public class Samsung : IVendor { /*...*/ }

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2943776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档