原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dba10g.blog.51cto.com/764602/228768
最近,我突然之间喜欢上了某个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);
}
}
优点:
客户免除直接创建产品对象了。我直接说“来份鸡翅”就可以了
缺点:
工厂负责这个创建逻辑。比如,我有什么请求,都得向他请示,询问有他们有什么东西,没有什么东西。
工厂类可能需要判断什么时候创建某种产品。
开闭原则:不符合,如果新添加了个食物,还要修改工厂,比如麦当劳的若干设施,代价太高了。
本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/228768