zoukankan      html  css  js  c++  java
  • 【设计模式】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信息
  • 相关阅读:
    Saltstack module acl 详解
    Saltstack python client
    Saltstack简单使用
    P5488 差分与前缀和 NTT Lucas定理 多项式
    CF613D Kingdom and its Cities 虚树 树形dp 贪心
    7.1 NOI模拟赛 凸包套凸包 floyd 计算几何
    luogu P5633 最小度限制生成树 wqs二分
    7.1 NOI模拟赛 dp floyd
    springboot和springcloud
    springboot集成mybatis
  • 原文地址:https://www.cnblogs.com/cutter-point/p/5186747.html
Copyright © 2011-2022 走看看