工厂模式

2018-07-10  本文已影响7人  蒸汽飞船

工厂模式——看这一篇就够了

简单工厂模式:

简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。
简单工厂模式的缺点是:
工厂类过于庞大,包含了大量的if…else代码,系统扩展不灵活,如果增加新类型的产品,必须修改静态工厂方法的业务逻辑,违反了开闭原则。
适用于:少量产品的情况下


工厂方法模式

就是一个产品一个工厂;
在工厂方法模式中,不再提供一个统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂,再抽象出来一个基类工厂。
例子:

  1. 基类罐头工厂 苹果罐头工厂 桃子罐头工厂
  2. 基类罐头产品 苹果罐头 桃子罐头

抽象工厂模式

抽象工厂模式和工厂方法模式最大的区别是,工厂方法针对的是产品等级,而抽象工厂创建的是产品族。

举例:

//城堡
public interface Castle {
  String getDescription();
}
//国王
public interface King {
  String getDescription();
}
//军队
public interface Army {
  String getDescription();
}


//王国(抽象工厂)
public interface KingdomFactory {
  Castle createCastle();
  King createKing();
  Army createArmy();
}

//精灵王国
public class ElfKingdomFactory implements KingdomFactory {
  public Castle createCastle() {
    return new ElfCastle();
  }
  public King createKing() {
    return new ElfKing();
  }
  public Army createArmy() {
    return new ElfArmy();
  }
}

//兽人王国
public class OrcKingdomFactory implements KingdomFactory {
  public Castle createCastle() {
    return new OrcCastle();
  }
  public King createKing() {
    return new OrcKing();
  }
  public Army createArmy() {
    return new OrcArmy();
  }
}

// 精灵族的城堡->
public class ElfCastle implements Castle {
  static final String DESCRIPTION = "This is the Elven castle!";
  @Override
  public String getDescription() {
    return DESCRIPTION;
  }
}
//精灵族的国王
public class ElfKing implements King {
  static final String DESCRIPTION = "This is the Elven king!";
  @Override
  public String getDescription() {
    return DESCRIPTION;
  }
}

//精灵族的军队
public class ElfArmy implements Army {
  static final String DESCRIPTION = "This is the Elven Army!";
  @Override
  public String getDescription() {
    return DESCRIPTION;
  }
}
//兽人相关的略
上一篇下一篇

猜你喜欢

热点阅读