工厂模式:
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的,工厂模式可分为三类:简单工厂模式、工厂方法模式和抽象工厂模式。
1) 简单工厂
又叫静态工厂,是三种模式中状态结构最简单的,用来接受参数,并根据参数决定返回返回实现同一接口的不同类的实例。
假设客户需要冰箱,他只需要工厂帮他生产就好了,因为这个工厂可以生产产品,
2) 工厂方法模式
为了满足客户的需求,冰箱种类越来越多,一个工厂无法生产所有的冰箱,于是单独分出来多个具体的工厂,每个具体工厂创建一种,具体工厂类只能创建一个具体产品,但冰箱工厂还是个抽象,需要指定某个具体的工厂才能生产出来
3) 抽象工厂模式
随着客户的需求越来越高,空调需要配置,与这个工厂开始生产需要的冰箱和配置。
一个简单的学生和老师都是人的例子:
package design;
/*
工厂设计模式
*/
interface People{//定义一个人的接口 产品的抽象接口
public void say();//说话
public void eat();//吃饭
}
class Student implements People{//定义子类Child 都有说话和吃饭的方法
@Override
public void say() {
System.out.println("我是学生");
}
@Override
public void eat() {
System.out.println("饭真好吃");
}
}
class Teacher implements People{//定义子类Teacher 同样有说话和吃饭的方法
@Override
public void say() {
System.out.println("我是老师");
}
@Override
public void eat() {
System.out.println("饭真香");
}
}
class Factory {// 定义简单工厂类 用来创造学生和老师
public static People getInstance(String className){
// 定义接口对象
if ("Student".equals(className)){//
People Student = new Student();// 通过Child子类实例化接口
return Student;
}else if ("Teacher".equals(className)){
People Teacher = new Teacher();// 通过Teacher子类实例化接口
return Teacher;
}else {
System.out.println("不存在");
return null;
}
}
}
class FactoryDemo{//测试类
public static void main(String[] args) {
People Student = Factory.getInstance("Student");
Student.say();
Student.eat();
People Teacher = Factory.getInstance("Teacher");
Teacher.say();
Teacher.eat();
}
}
测试结果
我是学生
饭真好吃
我是老师
饭真香