设计模式-简单工厂
1.设计模式-工厂方法
2.设计模式-简单工厂
简单工厂模式
传入参数,创建属于同一父类下的不同子类实例。
定义一个父类(通常是抽象的),再定义一些基于父类的具体子类,然后定义一个工厂类,包含了一个用于创建各个不同子类的静态方法,它根据传入的参数来判断应该创建那个子类实例。
简单工厂中,存在3个角色:
- 抽象产品
- 具体产品
- 简单工厂
简单工厂下的角色划分
User抽象父类
copypackage com.example.ezfactory.pojo;
import java.util.Arrays;
public abstract class User {
String id;
String name;
int[] permissions; // 权限数组: 1-查看,2-进入,3-管理,4-裁决
public User(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", permissions=" + Arrays.toString(permissions) +
'}';
}
}
Client客户子类
copypackage com.example.ezfactory.pojo;
import java.util.UUID;
public class Client extends User {
public Client(String name) {
super(name);
this.id = "c-".concat(UUID.randomUUID().toString()); //id以'c-'开头
this.permissions = new int[]{1}; //拥有权限1(查看)
}
}
Employee员工子类
copypackage com.example.ezfactory.pojo;
import java.util.UUID;
public class Employee extends User{
public Employee(String name) {
super(name);
this.id = "e-".concat(UUID.randomUUID().toString()); //id以'e-'开头
this.permissions = new int[]{1,2}; //拥有权限1(查看)和权限2(进入)
}
}
还有Manager(管理)和Boss(老板)以此类推
UserFactory简单工厂类
定义了一个静态方法:传入2个参数,一个指定User的类型,一个指定User实例对象的名字,并生成相应的实例对象
copypackage com.example.ezfactory;
import com.example.ezfactory.pojo.*;
public class UserFactory {
public static User getUser(String type, String name){
switch (type){
case "client":{
return new Client(name);
}
case "empolyee":{
return new Employee(name);
}
case "manager":{
return new Manager(name);
}
case "boss":{
return new Boss(name);
}
default:{
return null;
}
}
}
}
测试
Main.java
copypackage com.example.ezfactory;
import com.example.ezfactory.pojo.User;
public class Main {
public static void main(String[] args) {
User user = UserFactory.getUser("boss","老板");
System.out.println(user.toString());
}
}
把"boss"换成其他试试。
简单工厂的优点
★ 实现了责任的分割
★ 客户端可以不用知道具体产品的类名,只需要掌握基本的参数就行
简单工厂的缺点
★ 工厂类出问题,整个模块受牵连
★ 需要维护很多子类
★ 由于是静态工厂方法,如果父类有静态方法,子类将无法覆盖静态方法
应用场景
客户不关系具体的对象类名和创建细节,只需要初始参数,并且所需要创建的类不太多。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步