抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体实现类。

抽象工厂模式允许客户使用抽象接口来创建一组相关的产品,客户类和工厂类分开,客户需要任何产品的时候,只需要向工厂请求即可,客户无须修改就可以获得新产品。

抽象工厂模式的静态建模

客户需要产品只要向抽象工厂请求即可,由具体工厂生产具体产品给客户。

说到这先必都糊涂啦,说下区别吧!

工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。   
一个抽象工厂类,可以派生出多个具体工厂类。   
每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。   
一个抽象工厂类,可以派生出多个具体工厂类。   
每个具体工厂类可以创建多个具体产品类的实例。   
    
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类。   
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式的具体工厂类可以创建多个具体产品类的实例。
实例:
一个抽象工厂类,可以派生出多个具体工厂类:
Factory.java
public interface Factory {
	public Salary createSalary();
	public Insurance createInsurance();
}
HeBeiFactory.java
public class HeBeiFactory implements Factory{
	public Salary createSalary(){
		return new HeBeiSalary();
	}
	
	public Insurance createInsurance(){
		return new HeBeiInsurance();
	}
}
JiLinFactory.java
public class JiLinFactory implements Factory{
	public Salary createSalary(){
		return new JiLinSalary();
	}
	
	public Insurance createInsurance(){
		return new JiLinInsurance();
	}
}

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
Salary.java
public interface Salary {
	void computerSalary();
}
Insurance.java
public interface Insurance {
	void computerInsurance();
}
HeBeiSalary.java
public class HeBeiSalary implements Salary{
	public void computerSalary(){
		System.out.println("开始计算河北子公司的薪资");
	}
}
JiLinSalary.java
public class JiLinSalary implements Salary{
	public void computerSalary(){
		System.out.println("开始计算吉林子公司的薪资");
	}
}
HeBeiInsurance.java
public class HeBeiInsurance implements Insurance{
	public void computerInsurance(){
		System.out.println("开始计算河北子公司的社会保险");
	}
}
JiLinInsurance.java
public class JiLinInsurance implements Insurance{
	public void computerInsurance(){
		System.out.println("开始计算吉林子公司的社会保险");
	}
}
Client.java
public class Client {
	public static void main(String[] args) {
		Factory factory = new HeBeiFactory();
		Salary salary = factory.createSalary();
		salary.computerSalary();
		Insurance insurance = factory.createInsurance();
		insurance.computerInsurance();
		factory = new JiLinFactory();
		salary = factory.createSalary();
		salary.computerSalary();
		insurance = factory.createInsurance();
		insurance.computerInsurance();
	}
}
 在工厂方法模式中,客户端不再负责对象的创建,而是把这个责任交给了具体的工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。当一系列相互关联的产品被设计到一个工厂类后,客户端的调用将会变得非常简单。
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值