A041Java设计模式-工厂模式

一、概述

1、分类

工厂方法模式、抽象工厂模式;

 

二、工厂方法模式

1、分类

工厂方法模式分为三种:

①普通工厂模式:

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建;

②多个工厂方法模式:

是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象;

③静态工厂方法模式:

将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可;

 

2、普通工厂模式

简介:

建立一个工厂类,对实现了同一接口的一些类进行实例的创建;

代码示例:

公共接口Person:

package com.zibo.design_mode.factory;

public interface Person {
    void eat();
    void sleep();
}

学生类:

package com.zibo.design_mode.factory;

public class Student implements Person {
    @Override
    public void eat() {
        System.out.println("学生吃饭了!");
    }

    @Override
    public void sleep() {
        System.out.println("学生睡觉了!");
    }
}

老师类:

package com.zibo.design_mode.factory;

public class Teacher implements Person {
    @Override
    public void eat() {
        System.out.println("老师吃饭了!");
    }

    @Override
    public void sleep() {
        System.out.println("老师睡觉了!");
    }
}

工厂模式测试类:

package com.zibo.design_mode.factory;

public class FactoryPattern {
    public static void main(String[] args) {
        Person p1 = create("学生");
        p1.eat();
        p1.sleep();
        Person p2 = create("老师");
        p2.eat();
        p2.sleep();
    }
    //工厂方法
    public static Person create(String string){
        if("学生".equals(string)){
            return new Student();
        }else if("老师".equals(string)){
            return new Teacher();
        }else {
            throw new RuntimeException("请输入正确的参数!");
        }
    }
}

运行结果:

学生吃饭了!
学生睡觉了!
老师吃饭了!
老师睡觉了!

 

3、多个工厂方法模式

简介:

该模式是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象;

代码示例:

PersonFactory类:

package com.zibo.design_mode.factory;

public class PersonFactory {
    public Person createStudent(){
        return new Student();
    }

    public Person createTeacher(){
        return new Teacher();
    }
}

PersonFactoryTest测试类:

package com.zibo.design_mode.factory;

public class PersonFactoryTest {
    public static void main(String[] args) {
        PersonFactory factory = new PersonFactory();
        Person p1 = factory.createStudent();
        p1.eat();
        p1.sleep();
        Person p2 = factory.createTeacher();
        p2.eat();
        p2.sleep();
    }
}

运行结果:

学生吃饭了!
学生睡觉了!
老师吃饭了!
老师睡觉了!

 

4、静态工厂方法模式

简介:

将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可;

代码示例:

PersonStaticFactory类:

package com.zibo.design_mode.factory;

public class PersonStaticFactory {
    public static Person createStudent(){
        return new Student();
    }

    public static Person createTeacher(){
        return new Teacher();
    }
}

PersonStaticFactoryTest测试类:

package com.zibo.design_mode.factory;

public class PersonStaticFactoryTest {
    public static void main(String[] args) {
        Person p1 = PersonStaticFactory.createStudent();
        p1.eat();
        p1.sleep();
        Person p2 = PersonStaticFactory.createTeacher();
        p2.eat();
        p2.sleep();
    }
}

运行结果:

学生吃饭了!
学生睡觉了!
老师吃饭了!
老师睡觉了!

 

三、抽象工厂模式

1、简介

工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要扩展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?
那么这就用到了抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码;

 

2、代码示例

总工厂接口Factory:

package com.zibo.design_mode.factory;

public interface Factory {
    Person create();
}

学生工厂类:

package com.zibo.design_mode.factory;

public class StudentFactory implements Factory {
    @Override
    public Person create() {
        return new Student();
    }
}

老师工厂类:

package com.zibo.design_mode.factory;

public class TeacherFactory implements Factory {
    @Override
    public Person create() {
        return new Teacher();
    }
}

工厂测试类:

package com.zibo.design_mode.factory;

public class FactoryTest {
    public static void main(String[] args) {
        Factory f1 = new StudentFactory();
        Person p1 = f1.create();
        p1.eat();
        p1.sleep();
        Factory f2 = new TeacherFactory();
        Person p2 = f2.create();
        p2.eat();
        p2.sleep();
    }
}

运行结果:

学生吃饭了!
学生睡觉了!
老师吃饭了!
老师睡觉了!

 

 

 

 

 

 

你可能感兴趣的:(Java)