




已阅读5页,还剩63页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DRP(分销资源计划)项目开发分销资源计划 WEB 流程 1、 需求确定 2、 分析与设计-架构分析与设计、业务逻辑分析、业务逻辑设计、界面设计 3、 开发环境搭建 4、 开发测试开发-测试 5、 文档变攒 DRP 项目流程 1、分析与设计 2、架构分析和设计 3、业务逻辑分析和设计 4、界面设计 5、数据库设计开发环境搭建、开发与测试、文档编写 分销库存管理业务流程 DRP-需求分析(系统角色) 1、数据录入人员 2、商务代表/主管 3、商务经理 4、项目会计 5、财务经理/项目负责人 6、系统管理员 DRP-需求分析(高层用例) DRP-需求分析(系统管理功能用例) DRP-需求分析(基础数据管理功能用例) DRP-需求分析(基础数据管理物料维护) DRP-需求分析(基础数据管理分销商维护) DRP-需求分析(分销商库存管理功能用例) DRP-需求分析(分销费管理功能用例) DRP-需求分析(结账管理功能用例) DRP-需求分析(付款结算管理功能用例) DRP-需求分析(统计报表管理功能用例) 报表的设计:如意报表、润乾报表、jasper Report、用友报表 DRP、架构分析与设计 5、Web 层展现工具,ext、dorado() 7、 下拉菜单怎么建表?如何将所有的下拉表统一放在一张表中? 定义一个外键,数字字典表。 数据库建模 系 统 管 理 分 销 库 存 管 理 该 视 图 主 要 将 分 销 商 和 终 端 进 行 合 并 用 户 信 息用 户 代 码 用 户 名 称密 码 联 系 电 话Email 创 建 日 期 varchar2(10)varchar2(30) varchar2(20)varchar2(30) varchar2(30)date 基 础 数 据 管 理 分 销 商 信 息Id Pid分 销 商 级 别 代 码 名 称分 销 商 代 码 银 行 账 号联 系 电 话 地 址邮 编 是 否 为 叶 子是 否 为 分 销 商 number(10)number(10) char(3)varchar2(30) varchar2(10)varchar2(40) varchar2(30)varchar2(30) varchar2(10)char(1) char(1) 数 据 字 典代 码 名 称类 别 char(3)varchar(30)char(1) 终 端 客 户 信 息Id Pid终 端 客 户 级 别 名 称终 端 客 户 代 码 联 系 电 话联 系 人 地 址邮 编 是 否 为 叶 子是 否 为 终 端 number(10)number(10) char(3)varchar2(40) varchar2(10)varchar2(30) varchar2(20)varchar2(30) varchar2(10)char(1) char(1) 物 料 信 息物 料 代 码 物 料 类 别 代 码计 量 单 位 代 码 物 料 名 称规 格 型 号 varchar2(10)char(3) char(3)varchar2(20) varchar2(20)varchar2(20) 会 计 核 算 期Id 核 算 年核 算 月 开 始 日 期结 束 日 期 核 算 状 态 number(10)number(4) number(2)date datechar(1) 分 销 商 库 存 明 细 台 账 会 计 核 算 期 间 id 分 销 商 id物 料 代 码 期 初 数 量入 库 数 量 出 库 数 量 number(10)number(10) varchar2(10)number(12,2) number(12,2)number(12,2) 流 向 单 主 信 息流 向 单 号 操 作 类 型会 计 核 算 期 间 id 分 销 商 id录 入 人 代 码 操 作 日 期单 据 状 态 调 整 人 代 码调 整 日 期 抽 查 人 代 码抽 查 日 期 抽 查 描 述复 审 人 代 码 复 审 日 期 varchar2(20)char(1) number(10)number(10) varchar2(10)date char(1)varchar2(10) datevarchar2(10) datevarchar2(40) varchar2(10)date 流 向 单 明 细 表流 向 单 号 需 方 客 户 代 码物 料 代 码 操 作 数 量调 整 数 量 调 整 原 因调 整 标 记 varchar2(20)number(10) varchar2(10)number(12,2) number(12,2)varchar2(40) char(1) 需 方 客 户Id 名 称分 销 商 代 码 分 销 商 级 别 代 码Client_Temi_Level_Name T_CLIENTT_DATA_DICT T_TEMI_CLIENT 主 键 维 护 表表 名 值 varchar2(30)number(10) 2、将 DRP 脚本导入到数据库 a、创建用户 create user drp1 identified by drp1; b、创建表空间 create tablespace ts_drp1 datafile D:DRPdatafiledrp1-data.dbf size 100m; C、将 drp1 的表空间修改为 ts_drp1 alter user drp1 default tablespace ts_drp1; D、给用户 drp1 授权 grant create session,create table,create view,unlimited tablespace to drp1;注释:分别为登录、创建表、创建视图、使用表空间的权限 E、切换用户到 drp1,导入 SQL 脚本 Conn drp1/drp1 D:DRPsql_scriptdrp_create.sql; 此项目表的名称 T_FLOW_CARD_DETAIL T_CLIENT T_CLIENT_INV T_DATA_DICT T_FISCAL_YEAR_PERIOD T_FLOW_CARD_MASTER T_ITEMS T_TABLE_ID T_TEMI_CLIENT T_USER HTML(Hyper Text Markup Language) WEB 开发语言 1、 HTML 文档结构 用于设置一些头信息 Body 中常用标签 Bgcolor 指背景颜色 Background 指背景图片 横线 超链接 Hrefurl Target-目标窗口,关于目标窗口讲解 frame 路径问题: URL 统一资源定位 URN 统一资源名称 URI 统一资源标识 标题字体 换行: 和 ,一般用 字体设置 文字设置 特殊符号 图片放置 表单 Action 提交给服务器的那个程序处理 Method 可以取得 get 或 post(无大小限制) Type 可以取值(保存按钮等) 文本输入text 密码输入password 复选框checkbox 演示 checkbox 输入域 演示 checkbox 输入域 姓名: 计算机语言: C 语言 java 语言 vb 语言 Radio(单选框)-名字要一样 演示 radio 输入域 演示 radio 输入域 姓名: 计算机语言: C 语言 java 语言 vb 语言 列表框-select 演示 select 输入域 演示 select 输入域 姓名: 计算机语言: C 语言 java vb 文本区域 姓名: 描述: 按钮 button 隐藏表单hidden 表格table 演示 table 姓名 科目 成绩 张三 汇编语言 100 张三 C# 90 合计 190 Frame 框架 演示 frame HTML 中 target 属性的 4 个内定名称 隐含针(iframe)可以加滚动条 CSS 工作原理 外部样式表(引用一个样式表文件) Javascript 提高网页的互动能力,脚本语言(重点) DOM 编程最重要 Javascript 支持正则表达式 验证表单 Ajax 技术 Java 与 javaScript 的区别? alert(“helloworld“); JavaScript 基本语法 var v1=“helloworld“; var v2=helloworld; var v3=1234; var v4=true; var v5=123.54; var v6=null; var v7; alert(“v1=“ +v1); alert(“v2=“ +v2); alert(“v3=“ +v3); alert(“v4=“ +v4); alert(“v5=“ +v5); alert(“v6=“ +v6); alert(“v7=“ +v7); 1、关于 javascript 的调试,最好将浏览器的脚本通知打开 2、最好设置为页面检查 var pub = “全局变量 “; function sayHello() alert(pub); var v1=“20“; alert(v1+10); alert(parseInt(v1)+10); var v2=30.2; alert(v2+10); alert(parseFloat(v2)+10.2); var v3=30; var v4=40; var v5=“var temp“ + v3 + “=“ + v4 ; alert(v5); /将 v5 字符串转换成 javascript 表达式 eval(v5); / var temp30=40; alert(temp30); var i = “dddd“; switch(i) case aa: alert(“i=aa“); break; case bb: alert(“i=bb“); break; case dddd: alert(“i=dddd“); break; default: alert(“其它“); function Person(name,age) =name; this.age=age; var p = new Person(“李四“,20); alert( + “,“ + p.age); var s1=“HelloWorld“; var s2= new String(“HelloWorld“); alert(s1); alert(s2); alert(s1.charAt(4); alert(s1.indexOf(“r“); /取得最后一个 L 的位置 alert(s1.lastIndexOf(“l“); /分割 var s3 =“a,b,c,f“; var s4=s3.split(“,“); for(var i=0;i alert(Math.random(); alert(Math.random()*10); alert(Math.round(Math.random()*10); alert(Math.round(-10.5); alert(Math.round(10.5); /取绝对值 alert(Math.abs(-10.2); Date 对象 DOM 编程是文本对象模型 1、对象清单 Javascript 支持正则表达式 var s1=“dgsdhfhhOOhgjghuj“; /取得 oo 子串 alert(s1.search(/o2/i) var s2=“dgsdgsdoodgdfghdoogdgd“; var s3=s2.replace(/o2/i,“中国“); alert(s3); var s1=“dgsdhfhhOOhgjghuj“; /取得 oo 子串 var re = new RegExp(/o2/i); alert(re.test(s1); Servlet 知识点 java Web 开发基础 常见 WEB 服务器 以 Tomat 服务器支持 还有其它服务器:Resin Apache 、iis 动态网页技术:jsp/servlet php asp 范例:定义一个登陆页面,在 servlet 中进行传输 1、建立一个登陆页面 登录 用户: 密码: 2、 建立一个 java 文件,进行传输 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class LoginServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException String username = request.getParameter(“username“); String password = request.getParameter(“password“); System.out.println(“username=“ + username); System.out.println(“password=“ + password); /设置字符集 response.setContentType(“text/html;charset=GB18030“); response.getWriter().println(“登录成功!“); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doGet(request,response); 3、 利用 tomcat 进行 web 连接,创建步骤如下:在 webapps 文件夹中创建一个放入 servlet 文件的文件夹,并创建 WEB-INF 文件夹,并在此文件夹中创建 classes 文件夹, 并把 web.xml 文件放在同文件夹中。 a) WEB-INF/classes Web.xml Lib 进行 web.xml 配置 MyServlet LoginServlet MyServlet /loginServlet 简易计算器(第一种方法) 简易计算器 function doCal() /alert(document.getElementsByName(“value1“)0.value);/返回对象集合 var value1=parseInt(document.getElementById(“value1“).value); var flag=document.getElementById(“flag“).value; var value2=parseInt(document.getElementById(“value2“).value); /alert(value1+“,“ + flag + “,“ + value2); var s=0; switch(flag) case “+“: s=value1+value2; break; case “-“: s=value1-value2; break; case “*“: s=value1*value2; break; case “/“: s=value1/value2; /alert(s); /document.getElementById(“result“).value=s; document.getElementById(“span_result“).innerHTML=“ + s + “; 简易计算器 + - * / 简易计算器(第二种方法) 简易计算器二 function doCal() var value1=parseInt(document.getElementById(“value1“).value); var flag=document.getElementById(“flag“).value; var value2=parseInt(document.getElementById(“value2“).value); eval(“var s=“+value1+ flag +value2); document.getElementById(“span_result“).innerHTML=“ + s + “; 简易计算器二 + - * / HttpServlet 详解 Servlet 处理流程 Servlet 生命周期 Cookies import java.io.*; import javax.servlet.http.*; import javax.servlet.*; public class SetCooks extends HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException Cookie c1 = new Cookie(“password“,“123“); response.addCookie(c1); response.getWriter().println(“SetCooks OK!“); import java.io.*; import javax.servlet.http.*; import javax.servlet.*; public class ShowCooks extends HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException Cookie Cookies = request.getCookies(); for(int i=0;i MyServlet LoginServlet MyServlet /loginServlet StudentMgrServlet StudentServlet StudentMgrServlet /queryStudentServlet TestServlet TestServlet TestServlet /testServlet SetCooks SetCooks SetCooks /SetCooks ShowCooks ShowCooks ShowCooks /ShowCooks 学生管理 学生管理 根据出生日期段查询 出生日期:至 import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; import javax.servlet.*; public class StudentServlet extends HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException String sBeginDate=request.getParameter(“beginDate“); String sEndDate=request.getParameter(“endDate“); Date beginDate = new Date(); Date endDate = new Date(); try beginDate = new SimpleDateFormat(“yyyy-MM-dd“).parse(sBeginDate); endDate = new SimpleDateFormat(“yyyy-MM-dd“).parse(sEndDate); catch(Exception e) e.printStackTrace(); System.out.println(“sBeginDate=“ + sBeginDate); System.out.println(“sEndDate=“ + sEndDate); public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException doGet(request,response); MyServlet LoginServlet MyServlet /loginServlet StudentMgrServlet StudentServlet StudentMgrServlet /queryStudentServlet TestServlet TestServlet TestServlet /testServlet SetCooks SetCooks SetCooks /SetCooks ShowCooks ShowCooks ShowCooks /ShowCooks Cookie 详解 Servlet Session 简介 用 sessionid 只属于一次会话 JSP 简介执行原理 HelloWorld Jsp 可以先进行预编译,用户第一次启动就会快些 默认情况下方位 jsp 自动创建 session(是由 jsp 中 page 中的 session 属性决定的) ,对于每 一个用户来说只创建一次 JSP 工作流程 Jsp 编程 -Declaration 1、 这种其实是定义成员变量和方法的,此种方式使用较少 2、定义的代码,都会放在 jsp_service 方法中,作为局部变量使用, 采用方式使用广泛。 3、基本语法表达式: =后面必须是字符串变量或者可以被转换成字符串的表达式 不需要以;结束 只有一行 例如: “ “ -% “ -% “ “ 基本格式: 根据日期查询学生的信息 /引入包的格式 学生信息 出生日期:至 JSP 编码: 采用如下编码 是 Tomcat 发给浏览器的编码。 MVC 架构模式完成学生查询 学生信息 出生日期:至 第一步:查询页面 第二步:在 servlet 中进行转发(C) import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; import javax.servlet.*; public class SearchStudentServlet extends HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException String sBeginDate=request.getParameter(“beginDate“); String sEndDate=request.getParameter(“endDate“); Date beginDate = new Date(); Date endDate = new Date(); try beginDate = new SimpleDateFormat(“yyyy-MM- dd“).parse(sBeginDate); endDate = new SimpleDateFormat(“yyyy-MM-dd“).parse(sEndDate); catch(Exception e) e.printStackTrace(); StudentManager studentManager = new StudentManagerImpl(); List studentList = studentManager.findStudentList(beginDate,endDate); /放置对象,将学生列表放在 request 范围中 request.setAttribute(“student_list“,studentList); /转发是在服务器端转发的,客户端是不知道的 /request.getRequestDispatcher(“/student_list.jsp“).forward(request,r esponse); /将 studentList 放在 session 中 HttpSession session = request.getSession(); session.setAttribute(“student_list“,studentList); /重定向转发,不会共享 request,以下写法是错误的,该“/”代表 了 8080 端口 /response.sendRedirect(“/student_list.jsp“); /getContextPath()就是指向前面的目录 response.sendRedirect(request.getContextPath() + “/student_list.jsp“); 学生信息 学生代码 姓名 性别 出生日期 联系电话 家庭住址 班级名称 年龄 studentList = request.getAttribute(“student_list“); for(Iterator iter = studentList.iterator();iter.hasNext();) Student student = iter.next(); % 第三步:在 student_list.jsp 中将学生信息输出(V) DRP 项目建立 DbUtil 并完成 Oracle 数据库的连接 1、将 html 拷贝到 web 项目中 2、建立 DbUtil package com.cyf.drp.util; import java.sql.DriverManager; import java.sql.Connection; public class DbUtil public static Connection getConnection() throws Exception / Connection conn = null; / Class.forName(“oracle.jdbc.driver.OracleDriver“); / String url=“jdbc:oracle:thin:localhost:1521:orcl“; / String username=“drp1“; / String password=“drp1“; / conn = DriverManager.getConnection(url,username,password); / return conn; / /第二种方法 Connection conn = null; JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig(); Class.forName(jdbcConfig.getDrivername(); conn = DriverManager.getConnection(jdbcConfig.getUrl(),jdbcConfig.getUserNam e(),jdbcConfig.getPassword(); return conn; public static void main(String args) throws Exception System.out.println(DbUtil.getConnection(); 3、将 Oracle jdbc 驱动拷贝到 WEB-INF/lib 下 4、建立 xml 配置文件 sys-conf.xml,用 dom4j 写出来 oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:localhost:1521:orcl drp1 drp1 5、 采用 dom4j,建立 XmlConfigReader 类对 XML 进行解析(读取) package com.cyf.drp.util; import java.io.InputStream; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; /* * 采用单例模式解析sys-conf.xml文件 * author Administrator *用XML 的SAX访问方式解析 *Document对应xml文件 */ public class XmlConfigReader /饿汉式(预先加载) /private static XmlConfigReader instance = new XmlConfigReader(); /private XmlConfigReader() / / /public static XmlConfigReader getInstance() /公共的静态的入口点方法 / return instance; / /懒汉式(延迟加载lazy)要同步 private static XmlConfigReader instance = null; /保存jdbc相关配置信息 private JdbcConfig jdbcConfig = new JdbcConfig(); private XmlConfigReader() SAXReader reader = new SAXReader(); InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(“s ys-conf.xml“); try Document doc=reader.read(in); /取得jdbc相关配置信息 Element driverNameElt = (Element)doc.selectObject(“config/db-info/driver-name“); Element urlElt = (Element)doc.selectObject(“config/db- info/url“); Element userNameElt = (Element)doc.selectObject(“config/db-info/user-name“); Element passwordElt = (Element)doc.selectObject(“config/db-info/password“); /设置jdbc相关的配置 jdbcConfig.setDrivername(driverNameElt.getStringValue(); jdbcConfig.setUrl(urlElt.getStringValue(); jdbcConfig.setUserName(userNameElt.getStringValue(); jdbcConfig.setPassword(passwordElt.getStringValue(); catch (DocumentException e) / TODO Auto-generated catch block e.printStackTrace(); public static synchronized XmlConfigReader getInstance() if(instance = null) instance = new XmlConfigReader(); return instance; /* * 返回jdbc的相关配置 * return */ public JdbcConfig getJdbcConfig() return jdbcConfig; public static void main(String args) JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig(); / System.out.println(jdbcConfig.getDrivername(); / System.out.println(jdbcConfig.getUrl(); / System.out.println(jdbcConfig.getUserName(); / System.out.println(jdbcConfig.getPassword(); System.out.println(jdbcConfig); 6、 建立类 JdbcConfig 进行 jdbc 的配置信息 package com.cyf.drp.util; /* * jdbc配置信息 * author Administrator * */ public class JdbcConfig private String drivername; private String url; private String userName; private String password; public String getDrivername() return drivername; public void setDrivername(String drivername) this.drivername = drivername; public String getUrl() return url; public void setUrl(String url) this.url = url; public String getUserName() return userName; public void setUserName(String userName) this.userName = userName; public String getPassword() return password; public void setPassword(String password) this.password = password; Override public String toString() return this.getClass().getName()+ “driverName:“ + drivername + “,url:“ + url + “,userName:“ + userName + “; 7、将 dom4j 相关的 jar 拷贝到 WEB-INF/lib 下 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar 1、toString 方法,最好在每个信息类中覆盖,这样方便对象的输出 2、实体类通常来源于世界中概念,实体类通常和关系型数据库中的表对应,实 体类中的实例通常对应表中的一条记录,实体类中的属性对应表中的字段, 实体类也有 OID,通常对应表中的主键。 XML 可扩展标记语言 基本语法 (extensible markup language)是描述事务本身的 XML 的功能: 1、进行配置文件 2、进行数据交换 XSL 修饰 XML DTD 实例(约束、约定)-Schema 替代 8、了解 web.xml 中 9、XML 访问方式 a) DOM-DOM 是面向模型的,一次将 XML 文档加入内存,编程简单,适合小 型文件的解析 b) SAX-SAX 是面向事件的,读一部分解析一部分,编程复杂一些,适合大 型文件的解析 10、 XML (eXtensible-Markup Language)-描述事物本身 11、 XSL(eXtensible-Stylesheet Language)-修饰 XML 12、 DTD(Docment Type Definition)-约定 xml 的标签 13、 Schema-约定 xml 标签和类型 14、 Get 和 post 的区别? a) GET 提交将参数放到了 url 的后面,其实放到了 http 协议的头部 b) Post 不会将参数放到 url 的后面,它会放在 http 协议体中。 15、 转发和重定向的区别 a) 转发 转发不会改变浏览器的地址栏 转发共享一个 request 转发只能在同一个 web 应用中使用 b) 重定向 重定向会改变浏览器的地址栏 重定向不共享 request 可以重定向到任意 URL 16、 作业 a) 采用 DOM4j 读取 sys-config.xml 文件 b) 将 test01.XML 文件导入到数据库中,采用 PD 建立表(DOM4j) c) 在将导入到数据库中的数据读取出来,采用 DOM4j 生成 test01.XML 格式 一样的 xml 文件 1、 用户管理 Model1 模型 用户管理操作流程如下: 正则表达式为开始字符,$为结束字符 var re =new RegExp(/a-zA-Z0-94,6$/); 可以采用 request.setCharacterEncoding(“GB18030”)设置 request 字符集,后期会 讲解 Filter,采用 Filter 可以统一设置字符集 采用 Ajax 判断 userId 重复 /采用Ajax 技术 function validate(field) if(trim(field.value).length != 0) var xmlHttp = null; /表示当前浏览器不是ie,如ns,firefox if(window.XMLHttpRequest) xmlHttp = new XMLHttpRequest(); else if(window.ActiveXObject) xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP“); var url = “user_validate.jsp?userId=“ + trim(field.value) + “ xmlHttp.open(“GET“,url); /设置请求方式为GET,设置请求的URL,设置为异步提交 xmlHttp.open(“GET“,url,true); /将方法地址赋值给onreadystatechange属性 /类似于电话号码 5种状态 xmlHttp.onreadystatechange=function() /Ajax引擎状态为成功 if(xmlHttp.readyState = 4) /协议状态为成功 if(xmlHttp.status = 200) if(trim(xmlHttp.responseText) != “) /alert(xmlHttp.responseText); document.getElementById(“spandUserId“).innerHTML = “ + xmlHttp.responseText + “ else document.getElementById(“spandUserId“).innerHTML = “; else alert(“请求失败, 错误码=“ + xmlHttp.status); /将设置信息发送到Ajax引擎 xmlHttp.send(null); else document.getElementById(“spandUserId“).innerHTML = “; 分页查询 /* * 分页查询 * param pageNo 第几页 * param pageSize 每页多少条数据 * return */ public PageModel findUserList(int pageNo,int pageSize) StringBuffer sbSql = new StringBuffer(); sbSql.append(“select user_id, user_name, password, contact_tel, email, create_date“) .append(“from“) .append(“(“) .append(“select rownum rn,user_id, user_name, password, contact_tel, email, create_date“) .append(“from“) .append(“(“) .append(“select user_id, user_name, password, contact_tel, email, create_date from t_user where user_id Model1 模型 Model2 模型(MVC) Model2 在 model1 的基础上分离了控制 分层主要为了好管理,能更好的适应需求的变化,能够更好的进行人员的分 工 三层架构模式 三层之间的依赖关系: 表示层(jsp/Servlet)业务逻辑层(业务规则)持久化层(持久化逻辑,JDBC) 三层之间最好依赖于抽象,每一层都建立出一个抽象,如:我们的程序对 JDBC 的依赖就是 依赖了他的抽象层,我们和 JDBC 是单向依赖,我们只调用 JDBC,而 JDBC 不会调用我们的 程序,如果 JDBC 实现调用了我们,则此 JDBC 实现将和我们的程序将有严重的依赖,无法 扩展。 简单工厂模式: 工厂方法(开发以此方法为准)就是把产品创建细节隐藏 工厂方法的优点:支持 OCP 原则(开闭原则) 适用场景:单一系列产品
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西双版纳职业技术学院《人工智能实验课》2023-2024学年第二学期期末试卷
- 大连医科大学《跨境电商供应链管理》2023-2024学年第二学期期末试卷
- 北京科技大学《英语精讲》2023-2024学年第二学期期末试卷
- 中南大学《广告创意与表现》2023-2024学年第二学期期末试卷
- 2024年眼镜类产品及其零部件和眼镜盒项目投资申请报告代可行性研究报告
- 绿色环保宣传教育
- 日式风格装修设计说明
- 羊场的规划与设计
- 员工教育培训管理制度
- 怎样设计一个历史
- GB/T 12996-2024电动轮椅车
- 国土安全课件教学课件
- 心安即是归处读书分享
- 媒体创意经济:玩转互联网时代学习通超星期末考试答案章节答案2024年
- 2024年学校临时用工合同范例(二篇)
- 2024年全国高考数学试题及解析答案(新课标Ⅱ卷)
- 贵州水城宏源实业(集团)有限责任公司招聘笔试题库2024
- 工程造价咨询服务投标方案(技术方案)
- 网络传播概论(第5版)课件 第9、10章 网络重塑的文化、网络时代新的社会特征
- 癌症患者生活质量量表EORTC-QLQ-C30
- 14.促织《变形记》联读教学设计 2023-2024学年统编版高中语文必修下册
评论
0/150
提交评论