首页 > 其他 > 详细

工厂模式

时间:2014-02-18 15:59:09      阅读:332      评论:0      收藏:0      [点我收藏+]

  实例化这个活动不应该总是公开地进行,初始化经常造成“耦合问题”。使用new时,即实例化一个具体类,而代码绑着具体类则会导致代码更脆弱,缺乏弹性。除了使用 new 操作符以外,还有很多创建对象的方法。

  针对接口编程,可以隔离掉以后系统中可能发生的一大堆改变,因为通过多态,它可以与任何新类实现该接口。

  工厂可以将常见对象的代码集中在一个方法或对象中,可以避免代码重复,并且更方便以后的维护。这也意味着,客户在实例化对象时,只会依赖接口,而不是具体类,将客户代码与真实的实现解耦。但在工厂代码中,不可避免地使用具体类来实例化真正的对象,Y?对象的创建是现实的,如果不创建任何对象,就无法创建任何程序。然而利用工厂,可将这些创建对象的代码集中管理。

  下面依次介绍简单工厂,工厂方法模式,抽象工厂模式。

  简单工厂:将实例化具体类的代码从客户代码中剥离,单独写一个类来处理对象的创建,原来的代码用简单工厂来获取对象。

  代码示例:

public class PizzaStore

{

  Pizza OrderPizza(string type)

  {

    Pizza pizza;

    if (type.equals(cheese))        // 蓝色代码部分将使用简单工厂来创建对象: 

      pizza = new CheesePizza();    // pizza = SimplePizzaFactory.CreatePizza(type);

    else if (type.equals(cheese))

      pizza = new CheesePizza();

    pizza.prepair();

    pizza.bake();

    pizza.box();

  }

}

将上述蓝色字体部分提炼成简单工厂:

public class SimplePizzaFactory

{

  public static Pizza CreatePizza(string type)

  { 

    Pizza pizza;

    if (type.equals(cheese))

      pizza = new CheesePizza();

    else if (type.equals(cheese))

      pizza = new CheesePizza();

  }

  return pizza;

}

这样做的作用?(似乎只是将问题搬到另一个对象中罢了):把创建pizza的代码包装进一个类中,当以后实现改变时,只需修改这个类即可,同时也将具体实例化的过程从客户代码中删除,即解耦!

之后再介绍两个模式。。。

  工厂方法模式:定义了一个创建对象的接口,但由子类来决定要实例化的具体类是哪一个。工厂方法让类实例化推迟到子类。

  抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

工厂模式

原文:http://www.cnblogs.com/hachun/p/3554037.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!