设计模式--抽象工厂模式
来源:互联网 发布:萝莉有杀气源码 编辑:程序博客网 时间:2024/06/03 15:20
1 抽象工厂模式在工厂方法的基础上演变而来,通过反射来生成指定的对象,现有一需求,对不同的数据库的不同表执行操作。
代码结构图如下:
定义一个用户接口:
public interface IUSer { public void insert();}
SqlServer用户操作:
public class SqlServerUser implements IUSer{ @Override public void insert() { // TODO Auto-generated method stub System.out.println("SqlServerUser insert"); }}
Access用户操作:
public class AccessUser implements IUSer{ @Override public void insert() { // TODO Auto-generated method stub System.out.println("AccessUser insert"); }}
部门操作:
public interface IDepartment { public void insert();}
SqlServer:
public class SqlServerDepartment implements IDepartment{ @Override public void insert() { // TODO Auto-generated method stub System.out.println("SqlServerDepartment insert"); }}
Access:
public class AccessDepartment implements IDepartment { @Override public void insert() { // TODO Auto-generated method stub System.out.println("AccessDepartment insert"); }}
访问中心类,定义一个字符串通过拼接的方式组成类名利用反射来创建对象。
public class DataAccess { private static final String dataSourceStr = "SqlServer"; // private static final String dataSourceStr="Access"; public static IUser createUser() { IUser iUser=null; try { iUser=(IUser)Class.forName("com.tang.design.abstractfactory2."+dataSourceStr+"User").newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return iUser; } public static IDepartment createDepartment() { IDepartment iDepartment=null; try { iDepartment=(IDepartment)Class.forName("com.tang.design.abstractfactory2."+dataSourceStr+"Department").newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return iDepartment; }}
利用反射的时候需指明类的全限定名。
测试:
public static void main(String[] args) { IUser iUser = DataAccess.createUser(); iUser.insert(); IDepartment iDepartment = DataAccess.createDepartment(); iDepartment.insert(); }
参考《大话设计模式》
阅读全文
0 0
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- 设计模式---抽象工厂
- 【设计模式-抽象工厂】
- 设计模式-抽象工厂
- 设计模式--抽象工厂
- va_start和va_end使用详解
- 《辛雷学习方法》读书笔记——第一章 总论
- .bss section 与common section
- Android 打包apk无敌报错
- C语言学习记录 数组分配内存字节和字符串的差别
- 设计模式--抽象工厂模式
- shell进度条
- 根据IP查询所在城市接口(查询用户所在城市)
- Android 向系统日历中添加提醒(踩坑)
- delphi如何给按钮添加单键快捷键(F1~F12)
- iOS开发之从0到1搭建App框架
- Android常用ADB命令
- vue 页面传值 手机号隐藏
- JS数据类型