Java设计模式:工厂模式

Posted 小郑要做干饭人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java设计模式:工厂模式相关的知识,希望对你有一定的参考价值。

简单工厂模式:

首先,举一个例子吧,假如你有一所学校:

package com.zzx.设计模式.工厂模式.简单工厂;

/**
 * @Author Zhengzx
 * @Date 2022/9/20 15:44
 * @Title 简单工厂模式
 * @Version 1.0
 * @Describe
 */
public interface School 
    public void task();

再然后学校有老师对吧,校长可以指派老师做事情,

老师一: 张三

package com.zzx.设计模式.工厂模式.简单工厂;

/**
 * @Author Zhengzx
 * @Date 2022/9/20 15:47
 * @Title 简单工厂模式
 * @Version 1.0
 */
public class Teacher01 implements School


    @Override
    public void task() 
        System.out.println("张三老师去扫地");
    


老师二: 李四

package com.zzx.设计模式.工厂模式.简单工厂;

/**
 * @Author Zhengzx
 * @Date 2022/9/20 15:47
 * @Title 简单工厂模式
 * @Version 1.0
 */
public class Teacher02 implements School


    @Override
    public void task() 
        System.out.println("李四老师去擦窗户");
    


老师三: 王五

package com.zzx.设计模式.工厂模式.简单工厂;

/**
 * @Author Zhengzx
 * @Date 2022/9/20 15:47
 * @Title 简单工厂模式
 * @Version 1.0
 */
public class Teacher03 implements School


    @Override
    public void task() 
        System.out.println("王五老师去买一包Cigarette");
    


最后还有一位脾气暴躁的老师四: 野猪佩奇

package com.zzx.设计模式.工厂模式.简单工厂;

/**
 * @Author Zhengzx
 * @Date 2022/9/20 15:47
 * @Title 简单工厂模式
 * @Version 1.0
 */
public class Teacher04 implements School


    @Override
    public void task() 
        System.out.println("野猪佩奇:你TM消遣我们呢???");
    


最后,校长指派老师做事:

package com.zzx.设计模式.工厂模式.简单工厂;

/**
 * @Author Zhengzx
 * @Date 2022/9/20 15:52
 * @Title
 * @Version 1.0
 */
public class HeadMaster 
    public static void main(String[] args) 
        Teacher01 teacher01 = new Teacher01();
        teacher01.task();
        Teacher02 teacher02 = new Teacher02();
        teacher02.task();
    


运行结果:

我们观察上面的代码,虽然很好的完成了任务,但是,我们的四个实现类和和借口紧密的绑定到了一起,这意味着我们的代码耦合出现严重问题,不利于以后的维护,试想校长派发任务需要和老师接触,这肯定是一个不好的体验,那么我们就需要一个主任(俗称校长的gtz)来进行沟通,接下载创建主任:

package com.zzx.设计模式.工厂模式.简单工厂;

/**
 * @Author Zhengzx
 * @Date 2022/9/20 15:58
 * @Title 简单工厂
 * @Version 1.0
 */
public class Director 
    public static final int  SWEEP_THE_FLOOR = 1;
    public static final int  CLEAN_THE_WINDOWS = 2;
    public static final int  BUY_CIGARETTES = 3;

    public static School getMenu(int menuType)
        switch (menuType)
            case SWEEP_THE_FLOOR :
                return new Teacher01();
            case CLEAN_THE_WINDOWS:
                return new Teacher02();
            case BUY_CIGARETTES:
                return new Teacher03();
            default:
                return new Teacher04();
        
    

这样我们(也就是校长)就可以通过主任对老师派发任务了~~~

package com.zzx.设计模式.工厂模式.简单工厂;

/**
 * @Author Zhengzx
 * @Date 2022/9/20 16:15
 * @Title
 * @Version 1.0
 */
public class HeadMaster01 
    public static void main(String[] args) 
        School school = Director.getMenu(Director.SWEEP_THE_FLOOR);
        school.task();
    



这时候校长只需要通过调用getMenu()方法就可以给老师派发任务了

特点:
1.它是一个具体的类,非接口/抽象类.有一个重要的create(),利用if或者switch创建任务并返回;
2.create()方法通常是静态的,所以也称之为静态工厂
缺点:
1.扩展性差,假如我想添加一个开车的类,需要修改工厂类的方法;
2,不同的产品需要不同额外参数的时候不支持.

以上是关于Java设计模式:工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

java抽象工厂的使用意图是啥?

java工厂模式,懂的人进

Java 工厂模式

JAVA设计模式——工厂模式简单工厂模式工厂方法模式抽象工厂模式

Java,设计模式,简单工厂。

JAVA设计模式之工厂模式(三种工厂模式)