实例化这个活动不应该总是公开地进行,初始化经常造成“耦合问题”。使用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