最近,我突然之间喜欢上了某个MM,通过红军过草地的毅力,和顽强的意志,我终于得到了很MM共进晚餐的机会。我们约定在麦当劳见面。下面使我们见面的过程。
晚餐很简单,我们只吃了点鸡翅,和可乐。原因麦当劳太差劲了,他们只提供鸡翅和可乐,结果MM 饿着肚子陪我说了会话,就走了,结果只有一个,我被甩了。
请MM吃饭之简单工厂实现_模式
 
下面是实现源码:
package simplefactory;
/*
* 食物接口
*/

public interface Food {

  public void desc();
}
 
具体产品角色:
工厂创建的对象都是这个角色的实例
 
package simplefactory;

public class Cocacola implements Food{

  public void desc() {
    
    System.out.println("可口可乐,酸酸甜甜就是我");
    
  }

}
 
package simplefactory;
/*
* 鸡翅类
*/

public class ChickenWing implements Food {
  public void desc(){
    System.out.println("鸡翅香酥可口,跟老太太的裤腰似的");
  }
}
 
3.工厂类
创建具体产品
package simplefactory;

public class Mcdonald {

  public static Food factory(String type) throws BadFoodException{
    Food    food = null;
    if(type.equalsIgnoreCase("chickenwing")){
      food = new ChickenWing();
    }else if(type.equalsIgnoreCase("cocacola")){
      food = new Cocacola();
    }else{
      throw new BadFoodException("本店没有该食品,请核实");    
    }
    return food;
  }
}
 
4.辅助类
package simplefactory;

public class BadFoodException extends Exception {

  public BadFoodException(String msg){
    super(msg);
  }
}
 
优点:
客户免除直接创建产品对象了。我直接说“来份鸡翅”就可以了
缺点:
工厂负责这个创建逻辑。比如,我有什么请求,都得向他请示,询问有他们有什么东西,没有什么东西。
工厂类可能需要判断什么时候创建某种产品。
 
开闭原则:不符合,如果新添加了个食物,还要修改工厂,比如麦当劳的若干设施,代价太高了。