你的位置:首页 > ASP.net教程

[ASP.net教程]【设计模式】1、抽象工厂模式


 

对于这个抽象工厂的相应的代码实现

/** * 功能:抽象工厂模式的作用      适用性    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信息