提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
一.适用性
1.一个系统要独立于它的产品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
二.实例
package com.zoey.designPattern.AbstractFactory;
public interface IStudent {
void eat();
}
package com.zoey.designPattern.AbstractFactory;
public interface ITeacher {
void eat();
}
package com.zoey.designPattern.AbstractFactory;
public class FemaleTeacherPerson implements ITeacher {
@Override
public void eat() {
System.out.println("女教师去员工餐厅用餐!");
}
}
package com.zoey.designPattern.AbstractFactory;
public class MaleTeacherPerson implements ITeacher {
@Override
public void eat() {
System.out.println("男教师去员工餐厅用餐!");
}
}
package com.zoey.designPattern.AbstractFactory;
public class FemaleStudentsPerson implements IStudent {
@Override
public void eat() {
System.out.println("女同学去学生食堂用餐!");
}
}
package com.zoey.designPattern.AbstractFactory;
public class MaleStudentsPerson implements IStudent {
@Override
public void eat() {
System.out.println("男同学去学生食堂用餐!");
}
}
package com.zoey.designPattern.AbstractFactory;
public interface IPersonFactory {
ITeacher createTeacher();
IStudent createStudent();
}
package com.zoey.designPattern.AbstractFactory;
public class manFactory implements IPersonFactory {
@Override
public ITeacher createTeacher() {
return new MaleTeacherPerson();
}
@Override
public IStudent createStudent() {
return new MaleStudentsPerson();
}
}
package com.zoey.designPattern.AbstractFactory;
public class womanFactory implements IPersonFactory {
@Override
public ITeacher createTeacher() {
return new FemaleTeacherPerson();
}
@Override
public IStudent createStudent() {
return new FemaleStudentsPerson();
}
}
package com.zoey.designPattern.AbstractFactory;
public class test {
public static void main(String[] args) {
womanFactory womanF = new womanFactory();
ITeacher womanTeacher = womanF.createTeacher();
womanTeacher.eat();
IStudent womanStudent = womanF.createStudent();
womanStudent.eat();
manFactory manF = new manFactory();
ITeacher manTeacher = manF.createTeacher();
manTeacher.eat();
IStudent manStudent = manF.createStudent();
manStudent.eat();
}
}
结果:
女教师去员工餐厅用餐!
女同学去学生食堂用餐!
男教师去员工餐厅用餐!
男同学去学生食堂用餐!
比喻:摘自网络