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信息
  • 相关阅读:
    [转]SP 2010: How To – Event Receivers and Custom Error Pages
    sharepoint ServerTemplate values
    SPSiteDataQuery不完全使用手册(转)
    jQuery EasyUI 提示框(Messager)用法
    单选按钮 点击value值自动把单选按钮选中
    easy ui tabs 顶部绑定事件
    jquery 中的 $("#id") 与 document.getElementById("id") 的区别
    jquery ajax 的data 存表单的值
    JSP中用include标签动态引入其它文件报错
    Js获取当前日期时间及其它操作
  • 原文地址:https://www.cnblogs.com/cutter-point/p/5186747.html
Copyright © 2011-2022 走看看