美文网首页
工厂模式

工厂模式

作者: 蒸汽飞船 | 来源:发表于2018-07-10 23:23 被阅读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;
      }
    }
    //兽人相关的略
    

    相关文章

      网友评论

          本文标题:工厂模式

          本文链接:https://www.haomeiwen.com/subject/zrxeyftx.html