`

简单工厂模式

阅读更多
    工厂模式属于创建模式中的一种,是具体的创建和使用分离的一种方法。下面以是对head first中的实例的简单模仿。
    假设有两种SimplePizza类,它们都继承自SimplePizza, 有相同的属性和方法,但是方法的具体内容不一样。
    简单实现功能,在不考虑系统扩展重用的情况下,在一个调用类的一个方法中要根据传入的参数生成对应的对象,可以用if或switch判断实现,但是,当系统需要加入新的SimplePizza时,需要都调用了类的代码进行修改。下面是对修改开放的实现模式。
abstract class SimplePizza {
  String name;
  public void makeProcess(){}
}
class SimplePizzaA extends SimplePizza {
  public void makeProcess(){
    System.out.println("SimplePizzaA makeProcess");
    }
}
class SimplePizzaB extends SimplePizza {
  public void makeProcess(){
    System.out.println("SimplePizzaB makeProcess");
  }
}    
class OrderPizza{

  public SimplePizza getPizza(String pizzaname)
  {
     SimplePizza simple = null;
     if("SimplePizzaA".equals(pizzaname))
     {
       simple = new SimplePizzaA(); 
     }
     if("SimplePizzaB".equals(pizzaname))
     {
       simple = new SimplePizzaB();
     }
     return simple;
  }
}

    当有新的类型加入时,在添加新类的同时,也需要更新调用的具体类。其对修改进行了开放,系统维护成本高。
    需要对要变化的部分进行提取,使用固定的内容进行替换,简单工厂就是新建一个工厂类,用其将对象的创建过程在工厂中实现,调用内只需要固定的代码对工厂进行调用即可。
    下面是加入简单工厂的简单代码:
class SimpleFactory{
  public static SimplePizza createPizza(String pizzaname)
  {
    SimplePizza simple = null;
    if("SimplePizzaA".equals(pizzaname))
    {
      simple = new SimplePizzaA(); 
    }
    if("SimplePizzaB".equals(pizzaname))
    {
      simple = new SimplePizzaB();
    }
    return simple;
  }
}  
class OrderPizza{

  public SimplePizza getPizza(String pizzaname)
  {
    SimplePizza simplePizza = SimpleFactory.createPizza(pizzaname);
    return simplePizza;
   }
}

在上面的工厂中负责了两个类的创建,而调用类的代码不会因为新类型的增加而改变,降低了维护成本。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics