设计模式之工厂模式

  建造一个兵营吧。

  红警中的兵营分为盟军兵营和联军兵营,盟军兵营可以训练出美国大兵,联军的可以训练出解放军(暂时怎么认为吧,我也认为玩共和国之辉太赖皮)。

  好了,开始造兵营吧。

  先造一个兵营类,每次出兵前先判断一下当前是盟军阵营还是联军阵营,然后再造出相应的兵。

 

package com.zzl.designpattern.factory;

import com.zzl.designpattern.strategy.FootSolider;
import com.zzl.designpattern.strategy.LiberationArmy;
import com.zzl.designpattern.strategy.Solider;

public class Barracks {
    public Solider produceASolider(String type){
        Solider solider =null;
        if(type.equals("盟军")){
            solider = new FootSolider(null);
            
        }else if(type.equals("联军")){
            solider= new LiberationArmy(null);
        }
        if(null != solider){
            train(solider);
        }
        return solider;
    }
    /**
     * 训练士兵
     */
    private void train(Solider solider){
        System.out.println("训练这个士兵" + solider);
    }
}
原始兵营代码

  会有什么问题呢,如果我们新增了一个阵营:尤里阵营,那尤里阵营要建一个兵营怎么办,还得新增一个else if条件。

  兵营依赖于兵的实现,如果有很多兵,就要有很多的if条件,真的要将ifelse模式进行到底么?

依赖倒置原则:要依赖抽象,不要依赖具体类。

   兵营类应该依赖大兵的抽象类而不是具体的兵种。使用工厂方法:

  兵营的抽象类不负责实现具体的solider而由具体的子类负责实例化。

 

你可能感兴趣的:(设计模式之工厂模式)