对于这个抽象工厂的相应的代码实现
/** * 功能:抽象工厂模式的作用 适用性 1.一个系统要独立于它的产品的创建、组合和表示时。 2.一个系统要由多个产品系列中的一个来配置时。 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。 * 时间:2016年2月11日22:18 * 作者:cutter_point */package com.shejimoshi.create.AbstractFactory;public interface IFactory{ //这个工厂接口用来创建用户和部门 IUser createUser(); IDepartment createDepartment();}
1 /** 2 * 功能:抽象工厂模式的作用 3 适用性 4 1.一个系统要独立于它的产品的创建、组合和表示时。 5 2.一个系统要由多个产品系列中的一个来配置时。 6 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。 7 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。 8 * 时间:2016年2月11日22:21 9 * 作者:cutter_point10 */11 package com.shejimoshi.create.AbstractFactory;12 13 public interface IUser14 {15 //插入用户和获取用户数据16 void Insert(User user);17 User GetUser(int id);18 }
1 /** 2 * 功能:抽象工厂模式的作用 3 适用性 4 1.一个系统要独立于它的产品的创建、组合和表示时。 5 2.一个系统要由多个产品系列中的一个来配置时。 6 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。 7 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。 8 * 时间:2016年2月11日22:21 9 * 作者:cutter_point10 */11 package com.shejimoshi.create.AbstractFactory;12 13 public interface IDepartment14 {15 void insert(Department department);16 17 Department getDepartment(int id);18 }
对于IFactory派生的
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工厂模式的作用 6 适用性 7 1.一个系统要独立于它的产品的创建、组合和表示时。 8 2.一个系统要由多个产品系列中的一个来配置时。 9 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。10 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。11 * 时间:2016年2月11日下午10:40:4712 * 作者:cutter_point13 */14 public class AccessFactory implements IFactory15 {16 17 @Override18 public IUser createUser()19 {20 return new AccessUser();21 }22 23 @Override24 public IDepartment createDepartment()25 {26 // TODO Auto-generated method stub27 return new AccessDepartment();28 }29 30 }
1 /** 2 * 功能:抽象工厂模式的作用 3 适用性 4 1.一个系统要独立于它的产品的创建、组合和表示时。 5 2.一个系统要由多个产品系列中的一个来配置时。 6 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。 7 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。 8 * 时间:2016年2月11日22:21 9 * 作者:cutter_point10 */11 package com.shejimoshi.create.AbstractFactory;12 13 public class SqlServerFactory implements IFactory14 {15 16 @Override17 public IUser createUser()18 {19 // TODO Auto-generated method stub20 return new SqlServerUser();21 }22 23 @Override24 public IDepartment createDepartment()25 {26 // TODO Auto-generated method stub27 return new SqlServerDepartment();28 }29 30 }
IUser派生
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工厂模式的作用 6 适用性 7 1.一个系统要独立于它的产品的创建、组合和表示时。 8 2.一个系统要由多个产品系列中的一个来配置时。 9 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。10 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。11 * 时间:2016年2月11日下午10:32:1912 * 作者:cutter_point13 */14 public class SqlServerUser implements IUser15 {16 17 @Override18 public void Insert(User user)19 {20 System.out.println("插入一条用户数据到sql:" + user.getId() + ":" + user.getName());21 }22 23 @Override24 public User GetUser(int id)25 {26 System.out.println("获取一条用户数据根据sql的id:" + id);27 return null;28 }29 30 }
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工厂模式的作用 6 适用性 7 1.一个系统要独立于它的产品的创建、组合和表示时。 8 2.一个系统要由多个产品系列中的一个来配置时。 9 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。10 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。11 * 时间:2016年2月11日下午10:41:5412 * 作者:cutter_point13 */14 public class AccessUser implements IUser15 {16 17 @Override18 public void Insert(User user)19 {20 System.out.println("插入一个用户数据到access");21 }22 23 @Override24 public User GetUser(int id)25 {26 System.out.println("从access获取一条数据");27 return null;28 }29 30 }
IDepartment派生的子类
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工厂模式的作用 6 适用性 7 1.一个系统要独立于它的产品的创建、组合和表示时。 8 2.一个系统要由多个产品系列中的一个来配置时。 9 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。10 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。11 * 时间:2016年2月11日下午10:38:4812 * 作者:cutter_point13 */14 public class SqlServerDepartment implements IDepartment15 {16 17 @Override18 public void insert(Department department)19 {20 System.out.println("新增加一个部门");21 }22 23 @Override24 public Department getDepartment(int id)25 {26 System.out.println("获取一个部门数据");27 return null;28 }29 30 }
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工厂模式的作用 6 适用性 7 1.一个系统要独立于它的产品的创建、组合和表示时。 8 2.一个系统要由多个产品系列中的一个来配置时。 9 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。10 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。11 * 时间:2016年2月11日下午10:45:5412 * 作者:cutter_point13 */14 public class AccessDepartment implements IDepartment15 {16 17 @Override18 public void insert(Department department)19 {20 System.out.println("吧新增的部门添加到access数据库中");21 }22 23 @Override24 public Department getDepartment(int id)25 {26 System.out.println("从access数据库获取department信息");27 return null;28 }29 30 }
最后我们写一段测试代码:
1 package com.shejimoshi.create.AbstractFactory; 2 3 4 /** 5 * 功能:抽象工厂模式的作用 6 适用性 7 1.一个系统要独立于它的产品的创建、组合和表示时。 8 2.一个系统要由多个产品系列中的一个来配置时。 9 3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。10 4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。11 * 时间:2016年2月11日下午10:47:3712 * 作者:cutter_point13 */14 public class Test15 {16 public static void abstractfactorymethod(IFactory factory)17 {18 User user = new User();19 user.setId(1); user.setName("cutter_point");20 Department department = new Department();21 department.setId(1); department.setName("this is China");22 23 IUser iu = factory.createUser();24 iu.Insert(user);25 iu.GetUser(1);26 27 IDepartment idp = factory.createDepartment();28 idp.insert(department);29 idp.getDepartment(1);30 }31 32 public static void main(String[] args)33 {34 SqlServerFactory sqlf = new SqlServerFactory();35 AccessFactory accf = new AccessFactory();36 37 abstractfactorymethod(sqlf);38 abstractfactorymethod(accf);39 40 }41 42 }
运行结果:
插入一条用户数据到sql:1:cutter_point获取一条用户数据根据sql的id:1新增加一个部门获取一个部门数据插入一个用户数据到access从access获取一条数据吧新增的部门添加到access数据库中从access数据库获取department信息
原标题:【设计模式】1、抽象工厂模式
关键词:设计模式