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设计模式:工厂模式的主要内容,如果未能解决你的问题,请参考以下文章