一、引子
话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)看来这人比较爱国,没有日本车),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi后他说“开奥迪车!”。
你一定说:这人有病!直接说开车不就行了?!
而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的!
幸运的是,这种有病的现象在OO语言中可以避免了。下面以Java语言为基础来引入我们本文的主题:工厂模式!!
二、简介
工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类:
1. 简单工厂模式(Simple Factory)
2. 工厂方法模式(Factory Method)
3. 抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。
还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。两者皆可,这本为使用《Java与模式》的分类方法。
在什么样的情况下我们应该记得使用工厂模式呢?大体有两点:
1.在编码时不能预见需要创建哪种类的实例。
2.系统不应依赖于产品类实例如何被创建、组合和表达的细节
....................................
四、工厂方法模式
先来看下它的组成吧:
抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。
public abstract class car //抽象产品
{
public abstract void Drive();
}
public class bens : car //具体产品1
{
public override void Drive()
{
throw new Exception("The method or operation is not implemented.");
}
}
public class bmw : car //具体产品2
{
public override void Drive()
{
throw new Exception("The method or operation is not implemented.");
}
}
public abstract class driver //抽象工厂
{
public abstract car divercar();
}
public class benzdriver : driver //具体工厂1
{
public override car divercar()
{
return new bens();
}
}
public class bmwdriver : driver //具体工厂2
{
public override car divercar()
{
return new bmw();
}
}
public class test
{
public static void main()
{
driver dri = new benzdriver();
car ca = dri.divercar();
ca.Drive();
}
转载于:https://www.cnblogs.com/eng308/archive/2010/02/06/1664770.html