设计模式1抽象工厂模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式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_point 10 */ 11 package com.shejimoshi.create.AbstractFactory; 12 13 public interface IUser 14 { 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_point 10 */ 11 package com.shejimoshi.create.AbstractFactory; 12 13 public interface IDepartment 14 { 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:47 12 * 作者:cutter_point 13 */ 14 public class AccessFactory implements IFactory 15 { 16 17 @Override 18 public IUser createUser() 19 { 20 return new AccessUser(); 21 } 22 23 @Override 24 public IDepartment createDepartment() 25 { 26 // TODO Auto-generated method stub 27 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_point 10 */ 11 package com.shejimoshi.create.AbstractFactory; 12 13 public class SqlServerFactory implements IFactory 14 { 15 16 @Override 17 public IUser createUser() 18 { 19 // TODO Auto-generated method stub 20 return new SqlServerUser(); 21 } 22 23 @Override 24 public IDepartment createDepartment() 25 { 26 // TODO Auto-generated method stub 27 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:19 12 * 作者:cutter_point 13 */ 14 public class SqlServerUser implements IUser 15 { 16 17 @Override 18 public void Insert(User user) 19 { 20 System.out.println("插入一条用户数据到sql:" + user.getId() + ":" + user.getName()); 21 } 22 23 @Override 24 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:54 12 * 作者:cutter_point 13 */ 14 public class AccessUser implements IUser 15 { 16 17 @Override 18 public void Insert(User user) 19 { 20 System.out.println("插入一个用户数据到access"); 21 } 22 23 @Override 24 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:48 12 * 作者:cutter_point 13 */ 14 public class SqlServerDepartment implements IDepartment 15 { 16 17 @Override 18 public void insert(Department department) 19 { 20 System.out.println("新增加一个部门"); 21 } 22 23 @Override 24 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:54 12 * 作者:cutter_point 13 */ 14 public class AccessDepartment implements IDepartment 15 { 16 17 @Override 18 public void insert(Department department) 19 { 20 System.out.println("吧新增的部门添加到access数据库中"); 21 } 22 23 @Override 24 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:37 12 * 作者:cutter_point 13 */ 14 public class Test 15 { 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抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章