标签:
简单工厂模式
简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。
先来看看它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
代码:
//抽象产品角色
public interface Car{
public void drive();
}
//具体产品角色
public class Benz implements Car{
public void drive() {
System.out.println("Driving Benz
");
}
}
public class Bmw implements Car{
public void drive() {
System.out.println("Driving Bmw
");
}
}
//工厂类角色
public class Driver{
//工厂方法.注意 返回类型为抽象产品角色
public
static Car driverCar(String s)throws Exception{
//判断逻辑,返回具体的产品角色给Client
if(s.equalsIgnoreCase("Benz"))
return
new Benz();
else
if(s.equalsIgnoreCase("Bmw"))
return
new Bmw();
}
}
//测试
public class Magnate{
public static void main(String[] args){
Car car = Driver.driverCar("benz");
car.drive();
}
}
工厂方法模式
工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
先来看看它的组成:
1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
//抽象产品角色
public interface Car{
public void drive();
}
//具体产品角色
public class Benz implements Car{
public void drive() {
System.out.println("Driving Benz
");
}
}
public class Bmw implements Car{
public void drive() {
System.out.println("Driving Bmw
");
}
}
//抽象工厂角色
public interface Driver{
public Car driverCar();
}
//具体工厂角色
public class BenzDriver implements Driver{
public Car driverCar(){
return new Benz();
}
}
public class BmwDriver implements Driver{
public Car driverCar(){
return new Bmw();
}
}
//测试
public class Magnate{
public static void main(String[] args){
Driver driver = new BenzDriver();
Car car = driver.driverCar();
car.drive();
}
}
总结:
1)简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。
2)工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。
标签:
原文地址:http://www.cnblogs.com/lin-lin/p/4306599.html