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企服之家,中国第一个企服评测及商务社交产业平台。 |