白话设计模式_工厂模式之抽象工厂模式

        工厂方法模式只是针对一种产品,虽有多个具体产品,但只有一个抽象产品类;而抽象工厂模式针对多个产品,它有多个抽象产品类,并且每个产品类有多个具体子类产品;抽象工厂模式能够灵活的实现"整套产品"的动态切换。

 

   产品类:

public interface Phone {}
public interface Vehicle {}
//每个抽象产品有两个具体产品子类
public class BMW implements Vehicle{}   //宝马
public class QQ implements Vehicle{}   //奇瑞
public class IPhone implements Phone{}   //iPhone
public class XiaoMi implements Phone{}   //小米

         工厂类:

public interface AbstractFactory {
	Vehicle createVehicle();
	Phone createPhone();
}
public class ChinaFactory implements AbstractFactory {
	public Vehicle createVehicle() {	
		return new QQ();
	}
	public Phone createPhone() {
		return new XiaoMi();
	}
}
public class ForeignFactory implements AbstractFactory {
	public Vehicle createVehicle() {
		return new BMW();
	}
	public Phone createPhone() {
		return new IPhone();
	}
}

          使用抽象工厂:

public class Main {
	public static void main(String[] args) {
		AbstractFactory f = new ChinaFactory();
		Vehicle v = f.createVehicle();
		Phone p = f.createPhone();
		System.out.println(v + " " + p);
	}
}

 

        抽象工厂是针对产品族,也就是一套产品的,抽象工厂的具体子类工厂可根据需求生产出一套产品。上面我们动态将 f 赋值为一个ChinaFactory对象,则可从该工厂中取得“奇瑞”交通工具、“小米”手机,如果将 f 赋值为ForeignFatory对象,则可从该工厂中取得“宝马”交通工具、“iPhone”手机,而这种切换可以是动态的。

 

        抽象工厂模式的关键在于:多个抽象产品类(多种产品)、每个抽象产品类派生出多个具体产品、一个抽象工厂生产多个抽象产品、抽象工厂派生多个具体工厂、每个具体工厂根据需求生产一套产品。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值