抽象工厂模式

抽象工厂模式是一种创建型模式。

现以一个例子来说明:

现在有Q3,Q5,Q7三种车型,都是属于一个系列的车,但是三者之间的零部件差别却是很大,就拿Q3和Q7来说
Q3的发动机是国产的,Q7的发动机是进口的;Q3的轮胎是普通的,Q7的轮胎是越野轮胎。
Q3,Q7对应的是一系列车,而发动机、轮胎对应的则是一系列零部件,两者是两种不同的产品类型,这时候就
可以应用抽象工厂模式。

首先,汽车工厂需要生产轮胎和发动机部件。

CarFactory.java:

public abstract class CarFactory {

		// 生产轮胎
		public abstract ITire createTire();

		// 生产发动机
		public abstract IEngine createEngine();

	}
接下来为每一种零部件产品定义一个接口,并创建两个不同的实现类标识不同的零部件

public interface ITire {
		// 轮胎
		void tire();
	}
	
	public class NormalTire implements ITire {

		@Override
		public void tire() {
			System.out.println("普通轮胎");
		}
	}
	
	public class SUVTire implements ITire {

		@Override
		public void tire() {
			System.out.println("越野轮胎");
		}

	}

	
	public interface IEngine {
		// 发动机
		void engine();
	}
	
	public class DomesticEngine implements IEngine {

		@Override
		public void engine() {
			System.out.println("国产发动机");
		}
	}
	
	public class ImportEngine implements IEngine {

		@Override
		public void engine() {
			System.out.println("进口发动机");
		}
	}

对于生产Q3与Q7的工厂,其使用的零部件不同:

public class Q3Factory extends CarFactory {

		@Override
		public ITire createTire() {
			return new NormalTire();
		}

		@Override
		public IEngine createEngine() {
			return new DomesticEngine();
		}
	}
	
	public class Q7Factory extends CarFactory {

		@Override
		public ITire createTire() {
			return new SUVTire();
		}

		@Override
		public IEngine createEngine() {
			return new ImportEngine();
		}
	}

客户端:

public class Client {
		public static void main(String[] args) {
			// 生产一个Q3的工厂类
			CarFactory carFactory3 = new Q3Factory();
			carFactory3.createTire().tire();
			carFactory3.createEngine().engine();

			System.out.println("=================================");

			// 生产一个Q7的工厂类
			CarFactory carFactory7 = new Q7Factory();
			carFactory7.createTire().tire();
			carFactory7.createEngine().engine();
		}
	}

上面只是Q3和Q7要是有很多系列的车增加进来,又要新增一个工厂类,这样势必会导致
类的文件增多,因此在实际开发中一定要谨慎使用。


总结
抽象工厂模式优点:
一个显著的优点是分离接口与实现,客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道
具体的实现是谁,客户端只是面向产品的接口编程而已,使其从具体的产品实现中解耦,同时基于接口
与实现分离,使抽象工厂方法模式在切换产品类时更加灵感。
缺点:一是类文件会增加,二是不太容易扩展新的产品类,因为每当增加一个产品类就需要修改抽象工厂,
 那么所有的具体工厂类均会被修改。

参考书籍:

《Android源码设计模式分析与实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值