IT评测·应用市场-qidao123.com
标题:
三种工厂模式详解
[打印本页]
作者:
万万哇
时间:
2025-2-18 04:23
标题:
三种工厂模式详解
1.简单工厂
1.目录布局
2.Fruit.java 水果接口
package com.sunxiansheng.design_pattern.factory.simple;
/**
* Description: 水果接口
*
* @Author sun
* @Create 2025/2/2 10:52
* @Version 1.0
*/
public interface Fruit {
void eat();
}
复制代码
3.Apple.java 苹果
package com.sunxiansheng.design_pattern.factory.simple;
/**
* Description: 苹果
*
* @Author sun
* @Create 2025/2/2 10:52
* @Version 1.0
*/
public class Apple implements Fruit {
@Override
public void eat() {
System.out.println("吃苹果");
}
}
复制代码
4.Banana.java 香蕉
package com.sunxiansheng.design_pattern.factory.simple;
/**
* Description: 香蕉
*
* @Author sun
* @Create 2025/2/2 10:53
* @Version 1.0
*/
public class Banana implements Fruit {
@Override
public void eat() {
System.out.println("吃香蕉");
}
}
复制代码
5.FruitFactory.java 水果工厂根据类型来获取水果
package com.sunxiansheng.design_pattern.factory.simple;
/**
* Description: 水果工厂
*
* @Author sun
* @Create 2025/2/2 10:53
* @Version 1.0
*/
public class FruitFactory {
/**
* 根据传入的类型,来获取不同的水果
*
* @param type
* @return
*/
public static Fruit getFruit(String type) {
if (type.equalsIgnoreCase("apple")) {
return new Apple();
} else if (type.equalsIgnoreCase("banana")) {
return new Banana();
}
return null;
}
}
复制代码
6.Client.java
package com.sunxiansheng.design_pattern.factory.simple;
/**
* Description: 客户端
*
* @Author sun
* @Create 2025/2/2 10:55
* @Version 1.0
*/
public class Client {
public static void main(String[] args) {
Fruit apple = FruitFactory.getFruit("apple");
apple.eat();
Fruit banana = FruitFactory.getFruit("banana");
banana.eat();
}
}
复制代码
7.小结
简单工厂就是很直接的根据传入的类型去返回不同的对象而已
2.工厂方法
1.目录布局
2.IFactory.java 工厂接口
package com.sunxiansheng.design_pattern.factory.factorymethod.factory;
import com.sunxiansheng.design_pattern.factory.factorymethod.user.IUser;
/**
* Description: 工厂接口
*
* @Author sun
* @Create 2025/2/3 12:49
* @Version 1.0
*/
public interface IFactory {
/**
* 创建User表对象
*
* @return
*/
IUser createUser();
}
复制代码
3.MysqlFactory.java MySQL工厂
package com.sunxiansheng.design_pattern.factory.factorymethod.factory;
import com.sunxiansheng.design_pattern.factory.factorymethod.user.IUser;
import com.sunxiansheng.design_pattern.factory.factorymethod.user.MysqlUser;
/**
* Description: MySQL工厂
*
* @Author sun
* @Create 2025/2/3 12:50
* @Version 1.0
*/
public class MysqlFactory implements IFactory {
/**
* 创建User表对象
*
* @return
*/
@Override
public IUser createUser() {
return new MysqlUser();
}
}
复制代码
4.SqlserverFactory.java SQLServer工厂
package com.sunxiansheng.design_pattern.factory.factorymethod.factory;
import com.sunxiansheng.design_pattern.factory.factorymethod.user.IUser;
import com.sunxiansheng.design_pattern.factory.factorymethod.user.SqlserverUser;
/**
* Description: SQLServer工厂
*
* @Author sun
* @Create 2025/2/3 12:51
* @Version 1.0
*/
public class SqlserverFactory implements IFactory {
/**
* 创建User表对象
*
* @return
*/
@Override
public IUser createUser() {
return new SqlserverUser();
}
}
复制代码
5.IUser.java User表的接口
package com.sunxiansheng.design_pattern.factory.factorymethod.user;
/**
* Description: User表的接口
*
* @Author sun
* @Create 2025/2/3 12:50
* @Version 1.0
*/
public interface IUser {
/**
* 新增用户
*
* @param user
*/
void insert(User user);
}
复制代码
6.User.java 用户表实体类
package com.sunxiansheng.design_pattern.factory.factorymethod.user;
/**
* Description: 用户表实体类
*
* @Author sun
* @Create 2024/9/3 20:45
* @Version 1.0
*/
public class User {
private int id;
private String name;
private int age;
public User() {
}
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
复制代码
7.MysqlUser.java mysql用户表操作类
package com.sunxiansheng.design_pattern.factory.factorymethod.user;
/**
* Description: mysql用户表操作类
*
* @Author sun
* @Create 2024/9/3 20:47
* @Version 1.0
*/
public class MysqlUser implements IUser {
@Override
public void insert(User user) {
System.out.println("在mysql中插入一条用户数据");
}
}
复制代码
8.SqlserverUser.java sqlserver用户表操作类
package com.sunxiansheng.design_pattern.factory.factorymethod.user;
/**
* Description: sqlserver用户表操作类
*
* @Author sun
* @Create 2024/9/3 20:48
* @Version 1.0
*/
public class SqlserverUser implements IUser {
@Override
public void insert(User user) {
System.out.println("在sqlserver中插入一条用户数据");
}
}
复制代码
9.Client.java 客户端
package com.sunxiansheng.design_pattern.factory.factorymethod;
import com.sunxiansheng.design_pattern.factory.factorymethod.factory.IFactory;
import com.sunxiansheng.design_pattern.factory.factorymethod.factory.MysqlFactory;
import com.sunxiansheng.design_pattern.factory.factorymethod.factory.SqlserverFactory;
import com.sunxiansheng.design_pattern.factory.factorymethod.user.IUser;
import com.sunxiansheng.design_pattern.factory.factorymethod.user.User;
/**
* Description: 客户端
*
* @Author sun
* @Create 2025/2/3 13:01
* @Version 1.0
*/
public class Client {
public static void main(String[] args) {
User user = new User();
// 创建一个mysql工厂
IFactory mysqlFactory = new MysqlFactory();
// mysql工厂创建一个用户表操作类
IUser mysqlUser = mysqlFactory.createUser();
// 新增用户
mysqlUser.insert(user);
// 创建一个sqlserver工厂
IFactory sqlserverFactory = new SqlserverFactory();
// sqlserver工厂创建一个用户表操作类
IUser sqlserverUser = sqlserverFactory.createUser();
// 新增用户
sqlserverUser.insert(user);
}
}
复制代码
10.小结
工厂方法的核心就是一个工厂只负责创建一个对象。好比, MySQL和SQLServer对User表的SQL操作是不同的,所以就筹划一个 MySQL工厂和一个SQLServer工厂,然后目的就是创建各自的操作User表的对象。现在可以开始造对象了,起首需要一个IUser接口,然后就是MysqlUser对象和SqlserverUser对象。末了不同的工厂,返回对应的对象即可
3.抽象工厂
1.目录布局
2.小结
其实抽象工厂就是数据库工厂从创建一个表的CRUD酿成了创建多个表的CRUD。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4