设计模式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抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式-----抽象工厂模式

设计模式-简单工厂工厂方法模式抽象工厂模式详解

23中设计模式之抽象工厂模式

设计模式与代码的结构特性

一. 抽象工厂&工厂方法&简单工厂方法

java 抽象工厂模式