读书人

狂言设计模式_抽象工厂模式

发布时间: 2013-03-13 10:56:58 作者: rapoo

大话设计模式_抽象工厂模式

以一种方法的两种数据库实现为例子.


第一种:抽象工厂

package com.wzs.two;/** * 大话设计模式--page128 反射+抽象工厂 *  * @author Administrator *  */public class AbstractFactory {public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {// IFactory factory = new SqlServerFactory();User user = new User();IUser iu = DataAccess.createUser();iu.insert(user);iu.getUser(1);Department department = new Department();IDepartment id = DataAccess.createDepartment();id.insert(department);id.getDepartment(1);}}class DataAccess {private static String db = "Access";public static IUser createUser() throws InstantiationException, IllegalAccessException, ClassNotFoundException {return (IUser) Class.forName("com.wzs.two." + db + "User").newInstance();}public static IDepartment createDepartment() throws InstantiationException, IllegalAccessException, ClassNotFoundException {return (IDepartment) Class.forName("com.wzs.two." + db + "Department").newInstance();}}class DataSqlServer {private static String db = "SqlServer";public static IUser createUser() throws InstantiationException, IllegalAccessException, ClassNotFoundException {return (IUser) Class.forName("com.wzs.two." + db + "User").newInstance();}public static IDepartment createDepartment() throws InstantiationException, IllegalAccessException, ClassNotFoundException {return (IDepartment) Class.forName("com.wzs.two." + db + "Department").newInstance();}}/* * 用户 */class User {private int id;private String name;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;}}/* * 部门 */class Department {private int id;private String name;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;}}/* * 用户方法抽象接口 */interface IUser {void insert(User user);User getUser(int id);}/* * sql用户方法 */class SqlServerUser implements IUser {@Overridepublic User getUser(int id) {System.out.println("在sql server中得到id=" + id + "的User记录.");return null;}@Overridepublic void insert(User user) {System.out.println("在sql server中插入User新记录.");}}/* * access用户方法 */class AccessUser implements IUser {@Overridepublic User getUser(int id) {System.out.println("在Access中得到id=" + id + "的User记录.");return null;}@Overridepublic void insert(User user) {System.out.println("在Access中插入新User记录.");}}/* * 部门抽象方法接口 */interface IDepartment {void insert(Department department);Department getDepartment(int id);}/* * sql部门方法 */class SqlServerDepartment implements IDepartment {@Overridepublic Department getDepartment(int id) {System.out.println("在sql server中得到id=" + id + "的Department记录.");return null;}@Overridepublic void insert(Department department) {System.out.println("在sql server中插入新Department记录.");}}/* * access部门方法 */class AccessDepartment implements IDepartment {@Overridepublic Department getDepartment(int id) {System.out.println("在Access中得到id=" + id + "的Department记录.");return null;}@Overridepublic void insert(Department department) {System.out.println("在Access中插入新Department记录.");}}


1楼adam_zs昨天 22:15
[code=java]n输出结果:n在Access中插入新User记录.n在Access中得到id=1的User记录.n在Access中插入新Department记录.n在Access中得到id=1的Department记录.n[/code]

读书人网 >软件开发

热点推荐