设计模式一:工厂模式(一)

2014-11-24 09:14:54 · 作者: · 浏览: 2

工厂模式在《Java与模式》中分为三类:
1)简单工厂模式(Simple Factory):不利于产生系列产品;
2)工厂方法模式(Factory Method):又称为多形性工厂;
3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品;
简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。
工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构


具体事例:


1.从测试类开始

[java]
package com.bestaone.pattern.factory;

public class Test {

static Car car;

public static void main(String[] args) {

// 测试简单工厂
// 有点:只需告诉需要什么品牌车,就能生产什么车给你
car = SimpleFactory.buildCar("BMW");
car.driver();

// 工厂方法
// 优点:不同的车由不同的工厂生产,需要什么车,就使用对应的工厂生产
FactoryMethod factory = new BenzCarFactory();
car = factory.buildCar();
car.driver();

// 抽象工厂
// 优点:结合了简单工厂与工厂方法,不同的工厂生产不同功能的车(跑车、商务车)
// 而需要品牌车则告诉工厂所要的品牌
AbstractFactory aFactory = new SportsFactory();
car = aFactory.buildCar("BMW");
car.driver();
}

}

2.汽车接口
[java]
package com.bestaone.pattern.factory;

public interface Car {

public void driver();

}

3.宝马品牌车接口
[java]
package com.bestaone.pattern.factory;

/**
* 宝马
* @author 张国圣
*/
public interface Bmw extends Car {

@Override
public void driver();

}

4.奔驰品牌车接口
[java]
package com.bestaone.pattern.factory;

/**
* 奔驰
* @author 张国圣
*/
public interface Benz extends Car {

@Override
public void driver();
}

5.宝马车
[java]
package com.bestaone.pattern.factory;

public class BmwCar implements Bmw{

@Override
public void driver() {
System.out.println("开宝马");
}

}

6.奔驰车
[java]
package com.bestaone.pattern.factory;

public class BenzCar implements Benz{

@Override
public void driver() {
System.out.println("开奔驰");
}

}

7.宝马商务车
[java]
package com.bestaone.pattern.factory;

public class BmwBussinessCar implements Car{

@Override
public void driver() {
System.out.println("开宝马商务车");
}

}

8.宝马跑车
[java]
package com.bestaone.pattern.factory;

public class BmwSportsCar implements Car{

@Override
public void driver() {
System.out.println("开宝马跑车");
}

}

9.奔驰商务车
[java]
package com.bestaone.pattern.factory;

public class BenzBussinessCar extends BenzCar{

@Override
public void driver() {
System.out.println("开奔驰商务车");
}

}

10.奔驰跑车
[java]
package com.bestaone.pattern.factory;

public class BenzSportsCar implements Car{

@Override
public void driver() {
System.out.println("开奔驰跑车");
}

}

11.简单工厂
[java]
package com.bestaone.pattern.factory;

/**
* 简单工厂
* @author 张国圣
*/
public class SimpleFactory {

public static Car buildCar(String name){
Car car = null;
if("BMW".equals(name)){
car = new BmwCar();
}else{
car = new BenzCar();
}
return car;
}
}

12.工厂方法
[java]
package com.bestaone.pattern.factory;

/**
* 工厂方法
* @author 张国圣
*/
public interface FactoryMethod {

public abstract Car buildCar();

}

13.工厂方法子类--生产宝马车的工厂
[java]
package com.bestaone.pattern.factory;

public class BmwCarFactory implements FactoryMethod{

@Override
public Car buildCar() {