- 博客(44)
- 收藏
- 关注
原创 设计模式——单例模式
基本介绍所谓单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供了一个取得其对象实例的方法(静态方法)比如Hibernate的SessionFactory。实例分析单例设计模式总共有八种实现方式:1、饿汉式(静态变量)代码实现:将构造器私有化,在类内部创建对象,向外暴漏一个静态的公共方法。class Singleton{ private Singleton() { } p...
2021-12-02 11:31:37
322
原创 设计模式——合成复用原则
基本介绍尽量使用合成/聚合的方式,而不是使用继承。实例分析如图所示,如果我们只是让B类去使用A类的方法,使用继承会让B和A的耦合性增强。改进方法:方式一(使用依赖):方式二(使用聚合):方式三(使用组合):...
2021-11-26 16:02:47
316
原创 设计模式——迪米特法则
基本介绍一个对象应该对其他对象保持最少的了解。 类与类关系越亲切,耦合度越大。 迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供public方法,不对外泄露任何信息。 迪米特法则更简单的定义为:只与直接的朋友通信。所谓直接的朋友是指:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参
2021-11-26 16:01:01
107
原创 设计模式——开闭原则
基本介绍开闭原则是编程中最基础,最重要的设计原则。 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。 编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则。实例分析模拟简单画图功能:public class Shape { int type;}public class Rectangle extends Sha
2021-11-26 15:47:56
87
原创 设计模式——里氏替换原则
面向对象中继承性的思考和说明继承包含这样一层含义:父类中凡是已经实现好的方法实际上是在设定规范和契约,虽然它不强制要求所有的子类必须遵守这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。 继承性在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障。 继承需遵守里氏替换原则。基本介绍如
2021-11-26 15:17:41
272
原创 设计模式——依赖倒置(倒转)原则
基本介绍依赖倒置原则是指:高层模块不应该依赖低层模块,二者都应该依赖其抽象。 抽象不应该依赖细节,细节应该依赖抽象。 依赖倒转的中心思想是面向接口编程。 依赖倒转的设计理念为:相对于细节的多变性,抽象的东西要稳定的多。以抽象的基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类。 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。实例分析模拟信息发送class Email {
2021-11-26 10:50:32
5866
原创 设计模式——单一职责原则
基本介绍对类来说,一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1, A2,即把一个类分解为两个类。实例分析模拟交通共具的运行方式一使用类Vehicle中的run方法实现交通工具的运行class Vehicle { public void run(String vehicle) { System.out.println(vehicle + ...
2021-11-24 11:26:49
137
原创 设计模式简介
设计模式的目的编写程序(软件)过程中,程序员面临这来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好的代码重用性(相同功能的代码不用编写多次) 可读性(编程规范性, 便于其他人员的阅读和理解) 可扩展性(当需要增加新功能时,非常方便) 可靠性(增加新功能后,对原来的功能没有影响)使程序呈现高内聚,低耦合的特性。设计模式常用的七大原则单一职责原则 接口隔离原则 依赖倒转(倒置)原则 里氏替换原则 开闭原则 迪米特原则
2021-11-24 11:06:24
63
原创 DBUtils实现CRUD操作
使用之前需导入commons-dbutils-1.3.jar// 插入方法public void Insert() { Connection conn = null; try { QueryRunner runner = new QueryRunner(); conn = JDBCUtils.getConnection(); String sql = "insert into customers(name,email,birth)values(?,?,?)"; int
2021-09-28 16:01:30
85
原创 数据库连接池(C3P0, DBCP, druid)
传统数据库连接的问题普通的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证用户名和密码。需要数据库连接的时候就要向数据库要求一个,执行完成后再断开连接。此方式会消耗大量的资源和时间。数据库连接的资源并没有得到很好的重复利用,若同时有多人在线,频繁地进行数据库连接操作将占用很多系统资源,严重时甚至会导致服务器奔溃。 对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统内存泄漏。 不能
2021-09-28 15:41:49
160
原创 PreparedStatement实现高效的批量插入操作
在进行插入数据的操作时,如果数据过多,每一条数据都执行一次插入操作会浪费大量时间。在这种情况下可以使用batch来进行批量的插入操作,以提高效率。mysql服务器默认是关闭批处理的,我们需要通过设置参数rewriteBatchedStatements=true,让mysql开启批处理的支持。具体操作为,将上述参数写在配置文件url的后面,如下所示:url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatement...
2021-09-28 15:02:24
648
1
原创 PreparedStatement操作Blob类型的变量
MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存储的最大信息量上不同外,他们是等同的。MySQL的四种Blob类型TinyBlob 最大 255BBlob 最大 65KMediumBlob 最大 16MLongBlob 最大 4GPreparedStatement操作Blob类型的变量写入操作的方法:...
2021-09-28 14:49:56
221
原创 PreparedStatement接口实现CRUD操作详解
PreparedStatement 是Statement的子接口。可以解决Statement的sql注入问题和拼串问题。使用PreparedStatement 接口实现CRUD操作,分为以下四个步骤:步骤一:获取数据库连接步骤二:预编译sql语句,返回PreparedStatement的实例步骤三:填充占位符步骤四:执行sql语句步骤五:关闭资源使用PreparedStatement时,sql语句书写方式如下:例如:在数据表person中插入一个person对象,sql语句为
2021-09-28 11:28:57
117
原创 Statement接口实现CRUD操作详解
要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 种类型: 执行静态SQL语句。通常通过Statement实例实现。 执行动态SQL语句。通常通过PreparedStatement实例实现。 执行数据库存储过程。通常通过CallableStatement实例实现本篇文章介绍执行静态的SQL语句。使用Statement接口实现CRUD操作,分为以下四个步骤:步骤一:获取数据库连接步骤二:创建Statement实例...
2021-09-28 11:10:58
301
原创 JDBC简介,实现数据库连接
JDBC理解JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API)。可理解为:JDBC,是SUN提供的一套 API,使用这套API可以实现对具体数据库的操作(获取连接、关闭连接、DML、DDL、DCL)。JDBC实现数据库连接使用JBDC连接数据库需要导入mysql-connector-java-bin.jar。官网下载链接:https://dev.mysql.com/downloads/conne
2021-09-28 10:43:34
134
原创 Java8新特性(Lambda表达式,函数式接口,方法引用,构造器引用,数组引用,Stream API,Optional类)
Lambda表达式使用举例public void test(){ Comparator<Integer> com1 = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return Integer.compare(o1,o2); } }; int compare
2021-04-13 16:15:34
139
原创 java反射机制
反射的概述反射的理解Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。反射机制可以提供的功能(1)在运行时判断任意一个对象所属的类(2)在运行时构造任意一个类的对象(3)在运行时判断任意一个类所具有的成员变量和方法(4)在运行是获取泛型信息(5)在运行时调用任意一个对象的成员变量和方法(6)在运行时处理注解(7)生成动态代理体会反射机制的“动态性”public
2021-03-31 16:09:34
172
1
原创 java IO流总结(File类 节点流 缓冲流 转换流)
File类的使用File类的理解(1)File类的一个对象,代表一个文件或一个文件目录(文件夹)。(2)File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。File类的常用构造器(1)File(String filePath)(2)File(String parentPath,String childPath)(3)File(File parentFile,String ch
2021-03-25 16:21:41
208
原创 java 泛型总结
泛型的概念泛型是指允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量、创建对象时)确定,即传入实际的类型参数,也称为类型实参。例如:Collection< E >,List< E >,ArrayList< E > 这个< E >就是类型参数,即泛型。泛型在集合中的使用集合中有无泛型对比(1)没有泛型时1)任何类型的对象都可以添加到集合中,
2021-03-24 21:54:55
65
原创 java集合总结(List Set Map)
数组与集合集合、数组都是对多个数据进行存储操作的结构。此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储。数组存储的特点一旦初始化以后,其长度就确定了。数组一旦定义好,其元素的类型也就确定了,我们也就只能操作指定类型的数据。数组存储的弊端1、一旦初始化以后,其长度就不可修改。2、数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便,同时效率不高。3、获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用。4、数组存储数据的特点:有序、可重复。对于无序、不可重复的
2021-03-22 16:53:39
134
1
原创 java枚举类
说明类的对象只有有限个,确定的,我们称此类为枚举类。当需要定义一组常量时,建议使用枚举类。自定义枚举类步骤1)声明枚举类对象的属性:private final修饰。2)私有化类的构造器,并且给对象属性赋值。3)提供枚举类的多个对象:public static final修饰。举例class Season{ private final String seasonName; private final String seasonDesc; private Seaso
2021-03-22 16:52:46
69
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人