设计模式——抽象工厂模式(AbstractFactoryPattern)

来源:互联网 发布:中世纪2优化9俄罗斯 编辑:程序博客网 时间:2024/06/05 09:25

抽象工厂模式(AbstractFactory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

UML图:


IFactory:

package com.cnblog.clarck;public interface IFactory {    IUser createUser();        IDepartment createDepartment();}
SqlserverFactory:

package com.cnblog.clarck;public class SqlserverFactory implements IFactory {    @Override    public IUser createUser() {        return new SqlserverUser();    }    @Override    public IDepartment createDepartment() {        return new SqlserverDepartment();    }}
AccessFactory:

package com.cnblog.clarck;public class AccessFactory implements IFactory {    @Override    public IUser createUser() {        return new AccessUser();    }    @Override    public IDepartment createDepartment() {        return new AccessDepartment();    }}
IUser:

package com.cnblog.clarck;public interface IUser {    void insert(User user);        User getUser(int id);}
AccessUser:

package com.cnblog.clarck;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;    }}
SqlserverUser:

package com.cnblog.clarck;public class SqlserverUser implements IUser {    @Override    public void insert(User user) {        System.out.println("在SQL Server中给User表增加一条记录");    }    @Override    public User getUser(int id) {        System.out.println("在SQL Server中根据ID得到User表一条记录");        return null;    }}
IDepartment:

package com.cnblog.clarck;/** * IDepartment 接口,用于客户端访问,解除与具体数据库访问的耦合 *  * @author clarck *  */public interface IDepartment {    public void insert(Department department);    public Department getDepartment(int id);}
AccessDepartment:

package com.cnblog.clarck;public class AccessDepartment implements IDepartment {    @Override    public void insert(Department department) {        System.out.println("在Access中给Department表增加一条记录");    }    @Override    public Department getDepartment(int id) {        System.out.println("在Access中根据ID得到Department表一条记录");        return null;    }}
SqlserverDepartment:

package com.cnblog.clarck;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;    }}
Department:

package com.cnblog.clarck;public class Department {    private int mID;    private String mDeptName;    public int getID() {        return mID;    }    public void setID(int mID) {        this.mID = mID;    }    public String getDeptName() {        return mDeptName;    }    public void setDeptName(String mDeptName) {        this.mDeptName = mDeptName;    }}
User:

package com.cnblog.clarck;public class User {    private int mID;    private String mName;    public int getID() {        return mID;    }    public void setID(int mID) {        this.mID = mID;    }    public String getName() {        return mName;    }    public void setName(String mName) {        this.mName = mName;    }}
 Client:

package com.cnblog.clarck;public class Client {    public static void main(String[] args) {        User user = new User();        Department department = new Department();                //IFactory factory = new SqlserverFactory();        IFactory factory = new AccessFactory();                IUser iu = factory.createUser();        iu.insert(user);        iu.getUser(1);                IDepartment iDepartment = factory.createDepartment();        iDepartment.insert(department);        iDepartment.getDepartment(1);    }}











0 0
原创粉丝点击