工厂模式
工厂模式是用于处理复杂种类对象进行构建的,比如我们要生产汽车,自行车 卡车 电动汽车 等各种车型,我们可以直接创建的一个车工厂,直接告诉工厂我需要什么车型,工厂直接给你生产出来就行
优点:简单直接,不需要调用者具体关心调用细节
缺点:会增加项目复杂度,一旦增加种类,工厂也需要变动
样例
生产程序员工厂
- 1.定义一个接口,由程序员完成的方法
package com.example.demo.study.factory;
/**
* @Author zhanpeng
* @Date 2023/5/19 8:15
*/
public interface Coder {
void code();
}
- 实现coder这个接口完成自己的方法 比如写 c语言程序员,
package com.example.demo.study.factory;
/**
* @Author zhanpeng
* @Date 2023/5/19 8:19
*/
public class CCoder implements Coder{
@Override
public void code() {
System.out.println("\"code C\" = " + "code C");
}
}
- java程序员
package com.example.demo.study.factory;
/**
* @Author zhanpeng
* @Date 2023/5/19 8:17
*/
public class JavaCoder implements Coder{
@Override
public void code() {
System.out.println("\"code java\" = " + "code java");
}
}
- PYTHON程序员
package com.example.demo.study.factory;
/**
* @Author zhanpeng
* @Date 2023/5/19 8:18
*/
public class PythonCoder implements Coder{
@Override
public void code() {
System.out.println("\"code python \" = " + "code python ");
}
}
- 定义一个工厂类生产进行构造程序员
package com.example.demo.study.factory;
/**
* @Author zhanpeng
* @Date 2023/5/19 8:20
*/
public class CoderFactory {
public static Coder bulidCoder(CoderType coderType) {
Coder coder = null;
switch (coderType) {
case CODER_TYPE_C:
coder = new CCoder();
break;
case CODER_TYPE_JAVA:
coder = new JavaCoder();
break;
case CODER_TYPE_PYTHON:
coder = new PythonCoder();
break;
}
return coder;
}
}
定义一个枚举类型来判断是什么需要什么哪种语言的,就返回什么语言的程序员
package com.example.demo.study.factory;
/**
* @Author zhanpeng
* @Date 2023/5/19 8:20
*/
public class CoderFactory {
public static Coder bulidCoder(CoderType coderType) {
Coder coder = null;
switch (coderType) {
case CODER_TYPE_C:
coder = new CCoder();
break;
case CODER_TYPE_JAVA:
coder = new JavaCoder();
break;
case CODER_TYPE_PYTHON:
coder = new PythonCoder();
break;
}
return coder;
}
}
- 测试一下
package com.example.demo.study.factory;
import org.junit.Test;
/**
* @Author zhanpeng
* @Date 2023/5/19 8:27
*/
public class FactoryTest {
@Test
public void testFactory1(){
Coder coder = CoderFactory.bulidCoder(CoderType.CODER_TYPE_JAVA);
coder.code();
}
}