Java中的工厂模式详解

Java中的工厂模式:

(1) 核心思想:工厂模式相当于创建实例对象new(效果一致),但是工厂模式具有更大的可扩展性少的修改量(类中写别的类,好调用);更好的封装,降低程序之间的耦合程度。

(2) 关注焦点:无论什么工厂模式,不用刻意关注其细节,只要能够解决需求即可,只关心程序的耦合度下降了就可以

造车为例:

(3) 简单工厂模式(静态工厂模式):将造车行为放入到工厂里,客户想要产品,就直接调用工厂的造车方法即可;

 (只有一个工厂,完成所有车的生产,若要增加,就要修改工厂)

 即:(包含工厂类、抽象产品、具体产品)

 eg:

/**
 * 客户想要车
 */
public class simpleFactory {
	public static void main(String[] args) {
		//工厂生产
		factory factory = new factory();
		//开始造车,(大、中、小)
		factory.produceVihecle("big");
		factory.produceVihecle("middle");
		factory.produceVihecle("small");
	}
}
/**
 * 工厂生产车辆:只有一个工厂
 */
class factory{
	//按规模造车(大、中、小)
	public  vihecle produceVihecle(String scale) {
		switch (scale) {
		case "big":
			return new bigVihecle();
		case "middle":
			return new middleVihecle();
		case "small":
			return new smallVihecle();
		default:
			break;
		}
		return null;
	}
}
/**
 * 产品:抽象产品,具体产品
 */
//抽象产品
abstract class vihecle{
	public vihecle() {
	}
}
//具体产品:大车
class bigVihecle extends vihecle{
	public bigVihecle() {
		System.out.println("大车生产成功");
	}
}
//具体产品:中车
class middleVihecle extends vihecle{
	public middleVihecle() {
		System.out.println("中车生产成功");
	}
}
//具体产品:小车
class smallVihecle extends vihecle{
	public smallVihecle() {
		System.out.println("小车生产成功");
	}
}

(4) 工厂方法模式:对于造车(更多的型号、颜色或规模,简单工厂模式成本太大,)

 一个抽象工厂,多个具体工厂,分别负责相应功能车辆的生产

 即:(包含抽象工厂类、具体工厂类、抽象产品、具体产品)

 eg:

/**
 * 客户想要车
 */
public class factoryMethod {
	public static void main(String[] args) {
		//想要大车,大车工厂生产
		bigFactory bigFactory = new bigFactory();
		bigFactory.produceVehicle();
		//想要中车,中车工厂生产
		middleFactory middleFactory = new middleFactory();
		middleFactory.produceVehicle();
		//想要小车,小车工厂生产
		smallFactory smallFactory = new smallFactory();
		smallFactory.produceVehicle();
	}
}
/**
 * 工厂生产车辆:抽象工厂接口,具体工厂生产
 */
//抽象工厂
interface factory{
	vehicle produceVehicle();
} 
//具体工厂:生产大车
class bigFactory implements factory{
	public vehicle produceVehicle() {
		return new bigVehicle();
	}
}
//具体工厂:生产中车
class middleFactory implements factory{
	public vehicle produceVehicle() {
		return new middleVehicle();
	}
}
//具体工厂:生产小车
class smallFactory implements factory{
	public vehicle produceVehicle() {
		return new smallVehicle();
	}
}
/**
 * 产品:抽象产品,具体产品
 */
//抽象产品
abstract class vehicle{
	public vehicle() {
	}
}
//具体产品:大车
class bigVehicle extends vehicle{
	public bigVehicle() {
		System.out.println("大车生产成功");
	}
}
//具体产品:中车
class middleVehicle extends vehicle{
	public middleVehicle() {
		System.out.println("中车生产成功");
	}
}
//具体产品:小车
class smallVehicle extends vehicle{
	public smallVehicle() {
		System.out.println("小车生产成功");
	}
}

(5) 抽象工厂模式:(创建一组相关的或依赖的对象),大车、中车、小车均需创造导航、空调,并可以互相使用?

 一个抽象工厂(其中有很多方法,生产导航等),多个具体工厂(既生产大小中车,也生产轮胎等,并且大小中车都可以互相的导航和空调)

 eg:

/**
 * 客户想要车
 */
public class factoryAbstract {
	public static void main(String[] args) {
		//想要大车,中车的导航和小车的空调
		bigFactory bigFactory = new bigFactory();
		middleFactory middleFactory = new middleFactory();
		smallFactory smallFactory = new smallFactory();
		bigFactory.produceVehicle();
		middleFactory.produceNavigation();
		smallFactory.produceAirCondition();
	}
}
/**
 * 工厂生产车辆、导航和空调:抽象工厂接口,具体工厂生产
 */
interface factory{
	//车辆生产
	vehicle produceVehicle();
	//导航生产
	navigation produceNavigation();
	//空调生产
	ariCondition produceAirCondition();
}
//具体工厂
class bigFactory implements factory{
	public vehicle produceVehicle() {
		return new bigVehicle();
	}
	public navigation produceNavigation() {
		return new bigNavigation();
	}
	public ariCondition produceAirCondition() {
		return new bigAriCondition();
	}
}
class middleFactory implements factory{
	public vehicle produceVehicle() {
		return new middleVehicle();
	}
	public navigation produceNavigation() {
		return new middleNavigation();
	}
	public ariCondition produceAirCondition() {
		return new middleAriCondition();
	}
}
class smallFactory implements factory{
	public vehicle produceVehicle() {
		return new smallVehicle();
	}
	public navigation produceNavigation() {
		return new smallNavigation();
	}
	public ariCondition produceAirCondition() {
		return new smallAriCondition();
	}
}

/**
 * 产品(车辆、导航和空调):抽象产品,具体产品
 */
//车辆
abstract class vehicle{
}
class bigVehicle extends vehicle{
	public bigVehicle() {
		System.out.println("大车生产成功");
	}
}
class middleVehicle extends vehicle{
	public middleVehicle() {
		System.out.println("中车生产成功");
	}
}
class smallVehicle extends vehicle{
	public smallVehicle() {
		System.out.println("小车生产成功");
	}
}
//导航
abstract class navigation{
}
class bigNavigation extends navigation{
	public bigNavigation() {
		System.out.println("大车导航生产成功");
	}
}
class middleNavigation extends navigation{
	public middleNavigation() {
		System.out.println("中车导航生产成功");
	}
}
class smallNavigation extends navigation{
	public smallNavigation() {
		System.out.println("小车导航生产成功");
	}
}
//空调
abstract class ariCondition{
}
class bigAriCondition extends ariCondition{
	public bigAriCondition() {
		System.out.println("大车空调生产成功");
	}
}
class middleAriCondition extends ariCondition{
	public middleAriCondition() {
		System.out.println("中车空调生产成功");
	}
}
class smallAriCondition extends ariCondition{
	public smallAriCondition() {
		System.out.println("小车空调生产成功");
	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值