抽象工厂模式(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. esper(4-5)- Context 条件

    条件主要包含:Filter,Pattern,Crontab以及Time Period Filter主要就是对属性值的过滤,比如: create context NewUser partition by ...

  2. MYSQL分区表详解

    分区表对用户来说是一个独立的逻辑表,但是底层是多个物理字表组成的.分区代码实际上是对一组底层表的句柄对象封装.对分区表的请求,都会通过句柄对象转化成储存引擎的接口调用.所以分区对于SQL层来说是一个完 ...

  3. vue 修饰符(转载)

    大佬写的很详细,直接转载过来,随时可以参考, 原博:https://www.w3cplus.com/vue/vue-methods-and-event-handling.html 事件处理 如果需要在 ...

  4. 用poi替换ppt中的文字和图片

    try {            // 获取PPT文件             String pptModelPath =ConfigReadUtil.getInstance().getConfigI ...

  5. 【3dsMax安装失败,如何卸载、安装3dMax 2011?】

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  6. Oracle 单实例数据库安装和real application clusters数据库安装的区别

    在想了解Oracle单实例数据可和RAC数据库前,请确保你已经知道了数据库和实例的关系,如果不了解,请参考Oracle 数据库实例和数据库. 单实例数据库模式 单实例模式下,一个数据库只能通过一个实例 ...

  7. 关于jqgrid的一些使用

    1.jqgrid如何切换中英文 在做电力监控系统的时候,根据项目的需要涉及到中英文的切换,一直纠结了好久没有好的办法,虽然我知道可以手动更改引入的js文件就可以更改中英文,但是动态的一直没有办法更改, ...

  8. 百度地图api-动态添加覆盖物

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. Windows加密技术概述

    Windows加密是安全体系的重要基础和组成部分.现代CPU的保护模式是系统安全的硬件基石,基于CPU硬件的特权分级,Windows让自身的关键系统代码运行在高处理器特权级的内核模式,各种应用程序则运 ...

  10. Python 进阶

    高阶函数 定义 函数接受的参数是一个函数 函数的返回值为一个函数 满足以上2点中其中一个就是高阶函数 函数嵌套 定义 函数中def定义一个函数 嵌套会存在闭包, 其他情况不会有闭包(闭包闭的是变量) ...