工厂模式
工厂模式的类别
1. 简单工厂模式
2. 工厂方法模式
3. 抽象工程模式
1. 简单工厂模式
用于对实现逻辑的封装,仅仅对不同类对象进行封装,通过向工厂传递类型来指定要创建的对象。下面通过对学校不同人员进行管理讲解该模式:
用户类型(AbstractPerson)
public interface Person {
void manage();
}
学生(Student)
class Student implements Person{
public Student() {
this.manage();
}
@Override
public void manage() {
System.out.println("对学生发放健康卡!");
}
}
教师(teahcer)
class Teacher implements Person{
public Teacher() {
this.manage();
}
@Override
public void manage() {
System.out.println("对教师发放健康卡!");
}
}
人员管理工厂
class PersonFactory{
public Person managePerosn(String personType){
if (personType.equalsIgnoreCase("student")){
return new Student();
}else if (personType.equalsIgnoreCase("teacher")){
return new Teacher();
}
return null;
}
}
测试类
public class Demo {
public static void main(String[] args){
PersonFactory factory = new PersonFactory();
factory.managePerosn("student");
Teacher teacher = (Teacher) factory.managePerosn("teacher");
}
}
简单工厂的缺点
当增加新的类型:比如将学生分为本科生、研究生时,需要重写managePerosn()方法加“if else”条件,违反设计模式的开闭原则
2. 工厂方法模式
对简单工厂模式的一种改进,工厂类直接被抽象化,需要具体特定化的逻辑代码转移到实现抽象方法的子类中,这样我们就不要再去修改工厂类。
定义一个抽象工厂,其定义了人员管理的接口,但不负责具体的管理,将任务交给不同的派生类工厂。这样不用通过指定类型来创建对象了。
简单工厂的:用户类型(AbstractPerson)、#### 学生(Student)、#### 教师(teahcer)定义不变
管理不同人员的工厂抽象类
interface AbstractFactory{
Person managePerosn();
}
学生的派生类工厂
class StudentFactory implements AbstractFactory{
@Override
public Person managePerosn() {
return new Student();
}
}
教师的派生类工厂
class TeacherFactory implements AbstractFactory{
@Override
public Person managePerosn() {
return new Teacher();
}
}
测试Demo
public class Demo {
public static void main(String[] args){
AbstractFactory studentFactory = new StudentFactory();
AbstractFactory teacherFactory = new TeacherFactory();
studentFactory.managePerosn();
teacherFactory.managePerosn();
}
}
使用场景
当对象的创建逻辑比较复杂,不只是简单的 new 一下就可以,而是要组合其他类对象,做各种初始化操作的时候,我们推荐使用工厂方法模式,将复杂的创建逻辑拆分到多个工厂类中,让每个工厂类都不至于过于复杂。
3.抽象工厂模式
工厂模式的一个延伸,简单工厂和工厂方法模式只能对人员发放健康卡,党需要管理不同对象时,还需要重写,比较麻烦。工厂方法类中只有一个抽象方法,要想实现多种不同的类对象,只能去创建不同的具体工厂方法的子类来实列化,而抽象工厂 则是让一个工厂负责创建多个不同类型的对象