您的位置:首页 > 其它

抽象工厂模式

2012-09-08 16:33 169 查看
抽象工厂模式(AbstractFactoryPattern)提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体实现类。

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

抽象工厂模式的静态建模

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

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

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

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

区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式的具体工厂类可以创建多个具体产品类的实例。

实例:

一个抽象工厂类,可以派生出多个具体工厂类:

Factory.java

publicinterfaceFactory{
publicSalarycreateSalary();
publicInsurancecreateInsurance();
}

HeBeiFactory.java

publicclassHeBeiFactoryimplementsFactory{
publicSalarycreateSalary(){
returnnewHeBeiSalary();
}

publicInsurancecreateInsurance(){
returnnewHeBeiInsurance();
}
}

JiLinFactory.java

publicclassJiLinFactoryimplementsFactory{
publicSalarycreateSalary(){
returnnewJiLinSalary();
}

publicInsurancecreateInsurance(){
returnnewJiLinInsurance();
}
}


多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
Salary.java
publicinterfaceSalary{
voidcomputerSalary();
}
Insurance.java
publicinterfaceInsurance{
voidcomputerInsurance();
}
HeBeiSalary.java
publicclassHeBeiSalaryimplementsSalary{
publicvoidcomputerSalary(){
System.out.println("开始计算河北子公司的薪资");
}
}
JiLinSalary.java
publicclassJiLinSalaryimplementsSalary{
publicvoidcomputerSalary(){
System.out.println("开始计算吉林子公司的薪资");
}
}
HeBeiInsurance.java
publicclassHeBeiInsuranceimplementsInsurance{
publicvoidcomputerInsurance(){
System.out.println("开始计算河北子公司的社会保险");
}
}
JiLinInsurance.java
publicclassJiLinInsuranceimplementsInsurance{
publicvoidcomputerInsurance(){
System.out.println("开始计算吉林子公司的社会保险");
}
}
Client.java
publicclassClient{
publicstaticvoidmain(String[]args){
Factoryfactory=newHeBeiFactory();
Salarysalary=factory.createSalary();
salary.computerSalary();
Insuranceinsurance=factory.createInsurance();
insurance.computerInsurance();
factory=newJiLinFactory();
salary=factory.createSalary();
salary.computerSalary();
insurance=factory.createInsurance();
insurance.computerInsurance();
}
}

在工厂方法模式中,客户端不再负责对象的创建,而是把这个责任交给了具体的工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。当一系列相互关联的产品被设计到一个工厂类后,客户端的调用将会变得非常简单。




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: