java-抽象工厂模式案例

题目:

如果系统要求可支持多种数据库,并能方便的在多数据库之间切换,请用抽象工厂模式设计一个可支持多种数据库的数据库访问模块,并画出相应的类图?

类图:

 

代码:

class User{
    private int userId;
    private    String userName;
    public int getId() { return userId; }
    public void setId(int userId) { this.userId = userId; }
    public String getName() { return userName; }
    public void setName(String userName) { this.userName = userName; }
}

class Department
{
    private int deptId;
    private int StaffNumber;
    public int getId() { return deptId; }
    public void setId(int deptId) { this.deptId = deptId; }
    public int getStaffN() { return StaffNumber; }
    public void setStaffN(int StaffNumber) { this.StaffNumber = StaffNumber; }
};






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

class SqlserverUser implements IUser
{
    public void insert(User user){
        System.out.println("在Sql数据库中插入ID为:"+user.getId()+" 名字为:"+user.getName()+" 的一条用户记录");
    }

    public User getUser(int id){
        System.out.println("在Sql数据库取出ID为:"+id+"的一条用户记录");
        User user = new User();//这里user没有意义我们并没有从数据库中取数据,这里目的仅为满足返回值要求。
        return user;
    }
};

class AccessUser implements IUser
{
    public void insert(User user){
        System.out.println("在Access数据库中插入ID为:"+user.getId()+" 名字为:"+user.getName()+" 的一条用户记录");    
    }

    public User getUser(int id){
        System.out.println("在Access数据库取出ID为:"+id+"的一条User记录");
        User user = new User();//这里user没有意义我们并没有从数据库中取数据,这里目的仅为满足返回值要求。
        return user;
    }
};


interface IDept
{
    public void insert(Department dept);
    public Department getDept(int id);
};

class SqlserverDept implements IDept
{
    public void insert(Department dept){
        System.out.println("在Sql数据库中插入ID为:"+dept.getId()+" 部门人数为:"+dept.getStaffN()+" 的一条部门记录");
    }
    
    public Department getDept(int id){
        System.out.println("在Sql数据库取出ID为:"+id+"的一条部门记录");
        Department dept = new Department(); //这里dept没有意义我们并没有从数据库中取数据,这里目的仅为满足返回值要求。
        return dept;
    }

};

class AccessDept implements IDept
{
    public void insert(Department dept){
        System.out.println("在Access数据库中插入ID为:"+dept.getId()+" 部门人数为:"+dept.getStaffN()+" 的一条部门记录");    
    }
    
    public Department getDept(int id){
        System.out.println("在Access数据库取出ID为:"+id+"的一条部门记录");
        Department dept = new Department();//这里dept没有意义我们并没有从数据库中取数据,这里目的仅为满足返回值要求。
        return dept;
    }
};


interface IDateFactory
{
    public IUser createUser();
    public IDept createDept();
};

class SqlserverFactory implements IDateFactory
{
    public IUser createUser(){
        return new SqlserverUser();
    }
    
    public IDept createDept(){
        return new SqlserverDept();
    }
};

class AccessFactory implements IDateFactory
{
    public IUser createUser(){
        return new AccessUser();
    }
    public IDept createDept(){
        return new AccessDept();
    }
};





public class DataBase {
    public static void main(String[] args){
    User user = new User();
    user.setId(1);
    user.setName("小明");
    
    Department dept = new Department();
    dept.setId(1);
    dept.setStaffN(20);
    
    IDateFactory iDateFactory= new SqlserverFactory();
    IUser iUser = iDateFactory.createUser();
    iUser.insert(user);
    iUser.getUser(1);
    
    IDept iDept = iDateFactory.createDept();
    iDept.insert(dept);
    iDept.getDept(1);
    }
}


结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值