设计模式——抽象工厂模式(AbstractFactoryPattern)
抽象工厂模式(AbstractFactory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
UML图:

IFactory:
package com.cnblog.clarck;
public interface IFactory {
    IUser createUser();
    IDepartment createDepartment();
}
SqlserverFactory:
package com.cnblog.clarck;
public class SqlserverFactory implements IFactory {
    @Override
    public IUser createUser() {
        return new SqlserverUser();
    }
    @Override
    public IDepartment createDepartment() {
        return new SqlserverDepartment();
    }
}
AccessFactory:
package com.cnblog.clarck;
public class AccessFactory implements IFactory {
    @Override
    public IUser createUser() {
        return new AccessUser();
    }
    @Override
    public IDepartment createDepartment() {
        return new AccessDepartment();
    }
}
IUser:
package com.cnblog.clarck;
public interface IUser {
    void insert(User user);
    User getUser(int id);
}
AccessUser:
package com.cnblog.clarck;
public class AccessUser implements IUser {
    @Override
    public void insert(User user) {
        System.out.println("在Access中给User表增加一条记录");
    }
    @Override
    public User getUser(int id) {
        System.out.println("在Access中根据ID得到User表一条记录");
        return null;
    }
}
SqlserverUser:
package com.cnblog.clarck;
public class SqlserverUser implements IUser {
    @Override
    public void insert(User user) {
        System.out.println("在SQL Server中给User表增加一条记录");
    }
    @Override
    public User getUser(int id) {
        System.out.println("在SQL Server中根据ID得到User表一条记录");
        return null;
    }
}
IDepartment:
package com.cnblog.clarck; /**
* IDepartment 接口,用于客户端访问,解除与具体数据库访问的耦合
*
* @author clarck
*
*/
public interface IDepartment {
public void insert(Department department); public Department getDepartment(int id);
}
AccessDepartment:
package com.cnblog.clarck;
public class AccessDepartment implements IDepartment {
    @Override
    public void insert(Department department) {
        System.out.println("在Access中给Department表增加一条记录");
    }
    @Override
    public Department getDepartment(int id) {
        System.out.println("在Access中根据ID得到Department表一条记录");
        return null;
    }
}
SqlserverDepartment:
package com.cnblog.clarck;
public class SqlserverDepartment implements IDepartment {
    @Override
    public void insert(Department department) {
        System.out.println("在SQL Server中给Department表添加一条记录");
    }
    @Override
    public Department getDepartment(int id) {
        System.out.println("在SQL Server中根据ID得到Department表的一条记录");
        return null;
    }
}
Department:
package com.cnblog.clarck;
public class Department {
    private int mID;
    private String mDeptName;
    public int getID() {
        return mID;
    }
    public void setID(int mID) {
        this.mID = mID;
    }
    public String getDeptName() {
        return mDeptName;
    }
    public void setDeptName(String mDeptName) {
        this.mDeptName = mDeptName;
    }
}
User:
package com.cnblog.clarck;
public class User {
    private int mID;
    private String mName;
    public int getID() {
        return mID;
    }
    public void setID(int mID) {
        this.mID = mID;
    }
    public String getName() {
        return mName;
    }
    public void setName(String mName) {
        this.mName = mName;
    }
}
Client:
package com.cnblog.clarck;
public class Client {
    public static void main(String[] args) {
        User user = new User();
        Department department = new Department();
        //IFactory factory = new SqlserverFactory();
        IFactory factory = new AccessFactory();
        IUser iu = factory.createUser();
        iu.insert(user);
        iu.getUser(1);
        IDepartment iDepartment = factory.createDepartment();
        iDepartment.insert(department);
        iDepartment.getDepartment(1);
    }
}
设计模式——抽象工厂模式(AbstractFactoryPattern)的更多相关文章
- 设计模式——抽象工厂模式及java实现
		
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
 - 5. 星际争霸之php设计模式--抽象工厂模式
		
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
 - 设计模式之:抽象工厂模式AbstractFactoryPattern的实现
		
相比于工厂模式,抽象工厂模式的每个工厂可以创建产品系列,而不是一个产品: 抽象工厂用到的技术:接口.多态.配置文件.反射: 抽象工厂模式的设计原则: 实现客户端创建产品和使用产品的分离,客户端无须了解 ...
 - [04]Go设计模式:抽象工厂模式(Abstract Factory Pattern)
		
目录 抽象工厂模式 一.简介 二.代码 三. 参考资料 抽象工厂模式 一.简介 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂 ...
 - JAVA设计模式--抽象工厂模式
		
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
 - 深入浅出设计模式——抽象工厂模式(Abstract Factory)
		
模式动机在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可 ...
 - 24种设计模式--抽象工厂模式【Abstract Factory Pattern】
		
女娲造人,人是造出来了,世界是热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类 ...
 - C++设计模式——抽象工厂模式
		
问题描述 之前讲到了C++设计模式——工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理:由于工厂方法模式创建的对象都是继承于Produ ...
 - 设计模式 | 抽象工厂模式(abstract factory)
		
定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...
 
随机推荐
- element-ui多选框reserve-selection指定row-key保留数据更新之前的数据
			
element-UI 的table表格数据有提供多项框的功能,只要在表格列中多加一列就可以选择表格的数据 但是有时候表格的数据是有分页的,分页一般是要重新请求后台数据,这样上一页也就是上一次请求的数据 ...
 - Python编程:基础学习常见错误整理
			
# Python学习之错误整理: # 错误一:# TypeError: cannot concatenate 'str' and 'int' objects# 不能连接str和int对象age = 2 ...
 - Ubuntu 14.04 下安装搜狗输入法,不要删除ibus
			
今天安装了 sougou输入法.在ubuntu下面,然后网上一般的帖子都是要求你先删除 ibus 但是你删除了ibus之后,就会导系统设置被删除很多设置项,甚至无法打开, 所有你设置ubuntu输入法 ...
 - 深入学习keepalived之预备工作--线程
			
1. 线程的定义 1.1 线程定义在scheduler.h文件中,其定义如下所示 /* Thread itself. */ typedef struct _thread { unsigned long ...
 - HDU 1698——Just a Hook——————【线段树区间替换、区间求和】
			
Just a Hook Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
 - 【iptables】规则的试验和查看
			
1.存在桥接,查看桥接访客网络规则 ebtables -L 可以看到对不同的链的策略
 - JavaScript的作用域(Scope)和上下文(Context)
			
JavaScript对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性. 函数可以接收不同的的上下文和作用域.这些概念为JavaScrip ...
 - 从零开始写C# MVC框架之--- 配置log4日志
			
在框架中配置日志分2步,一个是在帮助项目Zy.Utilities--Zy.Utility.Core中新建log类,封装写入日志方法,还需要在Zy.Utility.Core添加 log4net 的引用 ...
 - J2EE课程设计:在线书店管理系统
			
1.系统实现 使用SpringMVC框架进行开发 使用Maven进行系统构建 使用MySql数据库 项目只实现了查看图书,搜索图书,加入购物车,创建订单,图书管理等基本功能 前台使用Bootstrap ...
 - js之可迭代对象
			
遍历Array可以采用下标循环,遍历Map和Set就无法使用下标.为了统一集合类型,ES6标准引入了新的iterable类型,Array.Map和Set都属于iterable类型. 具有iterabl ...