andy's blog

记录我的所做所思

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  1 Posts :: 13 Stories :: 0 Comments :: 0 Trackbacks

一:case context:
    一个Pizza管理系统 

  public  Pizza orderPizza(String type) {
         Pizza pizza;
         
if  (type.equals( " cheese " )) pizza = new  CheesePizza();
         
else   if  (type.euals( " veggie " )) pizza = new
 VeggiePizza();
         pizza.bake();
         pizza.box();
         
return  pizza();
      }

         问题:红色字体部分可能会modification(增加新的或删除旧的),所以必须把这部分包装起来成一个独立的类。

二:SimpleFactory模式      

   public   class  SimplePizzaFactory {
        pubic Pizza createPizza(String type)
{
              Pizza pizza;
              
if  (type.equals( " cheese " )) pizza = new  CheesePizza();
              
else   if  (type.euals( " veggie " )) pizza = new  VeggiePizza();
              
return  pizza;
         }
 
    }

    优点:因为是一个独立的类,所以可以共享,一处修改即可,不需修改客户端。
    缺点:对"close-opening"原则支持不够,如有新产品加入还是要改Factory中的代码。
    实例:DateFormat类:              

 Date date = DateFormat.getDateInstance(DateFormat.DEFAULT,Locale.FRENCH);


三:Factory Method模式
        当构建对象部分需求发生变化,如现在pizza分为美国和意大利两种口味。
        解决办法:1:一个抽象创建基类,abstract Product create();
                            2:具体类来实现create方法
                            3:抽象产品基类。
                            4:具体产品类。
  

// 具体工厂实现
public   class  UsPizzaFactory  extends  PizzaFactory {
  
public  Pizza createPizza(String type) {
     Pizza pizza;
     
if  (type.equals( " cheese " )) pizza = new  UsCheesePizza();
     
else   if  (type.equals( " veggie " )) pizza = new  UsVeggiePizza();
     
return  pizza;
  }

}

The Factory Method Pattern defines an interface for creation an object,but let subclasses decide which class to  instantiate.Factory Method lets a class defer instantiation to subclasses.

四:Abstract Factory
     抽象工厂模式和工厂方法模式的主要区别是,工厂方法模式针对的是一个产品等级结构,而抽象工厂方法对应多个产品等级结构。
     
  实例:创建分属不同操作系统的视窗构件。
          

posted on 2006-03-28 16:28 zhoumin 阅读(67) 评论(0)  编辑  收藏 所属分类: 设计模式

只有注册用户登录后才能发表评论。


网站导航: