抽象工厂模式(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)的更多相关文章

  1. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  2. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. 设计模式之:抽象工厂模式AbstractFactoryPattern的实现

    相比于工厂模式,抽象工厂模式的每个工厂可以创建产品系列,而不是一个产品: 抽象工厂用到的技术:接口.多态.配置文件.反射: 抽象工厂模式的设计原则: 实现客户端创建产品和使用产品的分离,客户端无须了解 ...

  4. [04]Go设计模式:抽象工厂模式(Abstract Factory Pattern)

    目录 抽象工厂模式 一.简介 二.代码 三. 参考资料 抽象工厂模式 一.简介 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂 ...

  5. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  6. 深入浅出设计模式——抽象工厂模式(Abstract Factory)

    模式动机在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可 ...

  7. 24种设计模式--抽象工厂模式【Abstract Factory Pattern】

    女娲造人,人是造出来了,世界是热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类 ...

  8. C++设计模式——抽象工厂模式

    问题描述 之前讲到了C++设计模式——工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理:由于工厂方法模式创建的对象都是继承于Produ ...

  9. 设计模式 | 抽象工厂模式(abstract factory)

    定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...

随机推荐

  1. C#数组 动态添加元素

    string[] a = new string[] { "1", "2", "3" }; 给a追加一个 "4" 1 2 ...

  2. CI 框架中的日志处理 以及 404异常处理

    最近在整理项目中的日志问题,查了一些关于 “CI 框架中的日志处理 以及 404异常处理” 的东西,顺便记录一下: 关于错误日志: 1. 在CI框架中的 system/core/CodeIgniter ...

  3. js动态实现时分秒

    <div id="time" style="color: #96C2DD;</div>      <script type="text/ ...

  4. Ace教你一步一步做Android新闻客户端(四) 优化Bitmap大法

    我计划着把需要用到的知识分解开来写,趁着我们要开发这款客户端的机会把安卓所有移动客户端开发中的技术贯穿其中,也是我自己成长的过程.By Ace in 20160121 我们开发一款新闻客户端程序,它的 ...

  5. 安装cloudermanager时出现org.spingframework.web.bind.***** host[] is not present at AnnotationMethodHandlerAdapter.java line 738 ****错误(图文详解)(博主推荐)

    不多说,直接上干货! 首先,这个问题,写给需要帮助的朋友们,本人在此,搜索资料近半天,才得以解决.看过国内和国外,资料甚少.特此,写此博客,为了弥补此错误解决的资料少的缘故! 问题详解  解决办法   ...

  6. How to add more to Git Bash on Windows

    How to add more to Git Bash on Windows Download the lastest wget binary for windows from https://ete ...

  7. 现学现卖】IntelliJ+EmmyLua 开发调试Unity中Xlua

    http://blog.csdn.net/u010019717/article/details/77510066?ref=myread http://blog.csdn.NET/u010019717 ...

  8. Unity3D游戏轻量级xlua热修复框架

    Unity3D游戏轻量级xlua热修复框架   一 这是什么东西 前阵子刚刚集成xlua到项目,目的只有一个:对线上游戏C#逻辑有Bug的地方执行修复,通过考察xlua和tolua,最终选择了xlua ...

  9. 1.2 js基础

    1.onchange    99%用到select上边. 2.js是干什么的,修改css样式和属性   3.选项卡步骤   1.获取元素 2.循环给按钮加自定义属性 3.循环给按钮加事件   4.封装 ...

  10. MATLAB-R2015b-win64安装详细教程

    1.首先下载以下文件 链接:https://pan.baidu.com/s/1eRAOKZw 密码:5nkj 2.双击R2015b_win64.iso打开(win8,win8.1,win10均可直接打 ...