设计模式一:工厂模式

工厂模式在《Java与模式》中分为三类:
1)简单工厂模式(Simple Factory):不利于产生系列产品;
2)工厂方法模式(Factory Method):又称为多形性工厂;
3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品;

简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。

工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构。而工厂方法模式针对的是一个产品的等级结构


具体事例:

类图:


1.从测试类开始

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.汽车接口

package com.bestaone.pattern.factory;

public interface Car {

	public void driver();
	
}

3.宝马品牌车接口

package com.bestaone.pattern.factory;

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

	@Override
	public void driver();

}

4.奔驰品牌车接口

package com.bestaone.pattern.factory;

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

	@Override
	public void driver();
}

5.宝马车

package com.bestaone.pattern.factory;

public class BmwCar implements Bmw{

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

6.奔驰车

package com.bestaone.pattern.factory;

public class BenzCar implements Benz{

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

7.宝马商务车

package com.bestaone.pattern.factory;

public class BmwBussinessCar implements Car{

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

8.宝马跑车

package com.bestaone.pattern.factory;

public class BmwSportsCar implements Car{

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

9.奔驰商务车

package com.bestaone.pattern.factory;

public class BenzBussinessCar extends BenzCar{

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

10.奔驰跑车

package com.bestaone.pattern.factory;

public class BenzSportsCar implements Car{

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

11.简单工厂

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.工厂方法

package com.bestaone.pattern.factory;

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

	public abstract Car buildCar();
	
}

13.工厂方法子类--生产宝马车的工厂

package com.bestaone.pattern.factory;

public class BmwCarFactory implements FactoryMethod{

	@Override
	public Car buildCar() {
		return new BmwCar();//专门制造宝马
	}

}

14.工厂方法子类--生产奔驰车的工厂

package com.bestaone.pattern.factory;

public class BenzCarFactory implements FactoryMethod{

	@Override
	public Benz buildCar() {
		return new BenzCar();//专门制造奔驰
	}
	
}

15.抽象工厂

package com.bestaone.pattern.factory;

/**
 * 抽象工厂
 * @author 张国圣
 */
public interface AbstractFactory {

	public abstract Car buildCar(String name);
	
}

16.抽象工厂子类--专门生产各品牌商务车工厂

package com.bestaone.pattern.factory;

/**
 * 专门制造专门制造商务车
 * @author 张国圣
 */
public class BussinessFactory implements AbstractFactory{

	@Override
	public Car buildCar(String name) {
		Car car = null;
		if("BMW".equals(name)){
			car = new BmwBussinessCar();
		}else{
			car = new BenzBussinessCar();
		}
		return car;
	}

}

17.抽象工厂子类--专门生产各品牌跑车工厂

package com.bestaone.pattern.factory;

/**
 * 专门制造跑车
 * @author 张国圣
 */
public class SportsFactory implements AbstractFactory{

	@Override
	public Car buildCar(String name) {
		Car car = null;
		if("BMW".equals(name)){
			car = new BmwSportsCar();
		}else{
			car = new BenzSportsCar();
		}
		return car;
	}
	
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值