大话设计模式-抽象工厂模式(大鸟和小菜Java版)

注:本文只是把书上的c++代码,变成使用Java来进行实现,相当于自己的学习笔记
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

写的是抽象工厂模式的数据访问的那部分代码。
如下:

package 设计模式.抽象工厂模式;

//创建一个User类
public class User {
    private int id;
    private String name;
//set和get方法
    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;
    }
}

package 设计模式.抽象工厂模式;

//Department类
public class Department {
    private int id;
    private String name;

//    set和get方法
    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;
    }
}

package 设计模式.抽象工厂模式;

//IUser接口
public interface IUser {
    void insert(User user);
    User getUser(int id);
}

package 设计模式.抽象工厂模式;

//IDepartment接口
public interface IDepartment {
    void insert(Department department);
    Department getDepartment(int id);
}

package 设计模式.抽象工厂模式;

//SqlServerUser类
public class SqlServerUser implements IUser{
    public void insert(User user){
        System.out.println("在SQL Server中给User表增加一条记录");

    }


    public User getUser(int id){
        System.out.println("在SQL Server中根据ID得到User表的一条记录");
        return null;
    }

}

package 设计模式.抽象工厂模式;

//SqlServerDepartment类,实现IDepartment接口
public class SqlServerDepartment implements IDepartment{
    @Override
    public void insert(Department department) {
        System.out.println("在SQL Server中给Department表增加一条记录");
    }

    @Override
    public Department getDepartment(int id) {
        System.out.println("在 SQL Server中根据ID得到Department表一条记录");
        return null;
    }
}

package 设计模式.抽象工厂模式;

//IFactory接口
public interface IFactory {
    IUser createUser();
    IDepartment createDepartment();
}

package 设计模式.抽象工厂模式;

//sqlServerfactory类实现了IFactory接口
public class SqlServerFactory implements IFactory{
    @Override
    public IUser createUser() {
        return new SqlServerUser();
    }

    @Override
    public IDepartment createDepartment() {
        return new SqlServerDepartment();
    }
}

接下来是对Access的代码

package 设计模式.抽象工厂模式;

//AccessUser实现Iuser
public class AccessUser implements IUser{

    @Override
    public void insert(User user) {
        System.out.println("在Access中给User表增加一条记录");
    }

    @Override
    public User getUser(int id) {
        System.out.println("在Access中根据ID得到User表一条记录");
        return null;
    }
}

package 设计模式.抽象工厂模式;

//该类实现了IDepartment接口
public class AccessDepartment implements IDepartment{
    @Override
    public void insert(Department department) {
        System.out.println("在Access中给Deaprtment表增加一条记录");
    }

    @Override
    public Department getDepartment(int id) {
        System.out.println("在Access中根据ID得到Deaprtment表一条记录");
        return null;
    }
}

package 设计模式.抽象工厂模式;

//该类实现了IFactory接口
public class AccessFactory implements IFactory{
    @Override
    public IUser createUser() {
        return new AccessUser();
    }

    @Override
    public IDepartment createDepartment() {
        return new AccessDepartment();
    }
}

最后是一个测试主类

package 设计模式.抽象工厂模式;

//测试主类,分别对不同的数据库进行调用
public class Test {
    public static void main(String[] args) {
        User user = new User();
        Department department = new Department();

        IFactory factory = new AccessFactory();
        IUser iu = factory.createUser();

        iu.insert(user);
        iu.getUser(1);

        IDepartment id = factory.createDepartment();

        id.insert(department);
        id.getDepartment(1);
    }
}

附上输出结合
在这里插入图片描述
以上就是抽象工厂模式的Java代码实现啦

参考大佬的文章:[https://blog.youkuaiyun.com/MONKEY_D_MENG/article/details/5707076]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值