Java设计模式之单例模式
模式介绍所谓类的单例设计模式,就是 采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。
比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建Session对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够,这是就会使用到单例模式。
八种实现方式饿汉式(静态常量)
构造器私有化 (防止 new )
类的内部创建对象
向外暴露一个静态的公共方法
代码实现如下:
1234567891011//饿汉式(静态变量)class Singleton { //1. 构造器私有化 private Singleton() {} //2. 本类内部创建对象实例 private final static Singleton instance = new Singleton(); //3. 提供一个公有的静态方法,返回实例对象 public static Single ...
Java设计模式之六大原则
目的编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好
代码重用性 (即:相同功能的代码,不用多次编写)
可读性 (即:编程规范性, 便于其他程序员的阅读和理解)
可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)
可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)
使程序呈现高内聚,低耦合的特性
六大原则设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据) 。
单一职责原则基本介绍对类来说的, 即一个类应该只负责一项职责。
细节说明
降低类的复杂度,一个类只负责一项职责。
提高类的可读性,可维护性。
降低变更引起的风险。
通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则。
接口隔离原则基本介绍客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。
细节说明
存在多个类通过接口依赖另一个类,若该接 ...
Java对象的浅克隆和深克隆
引言在Object基类中,有一个方法叫clone,产生一个前期对象的克隆,克隆对象是原对象的拷贝,由于引用类型的存在,有深克隆和浅克隆之分,若克隆对象中存在引用类型的属性,深克隆会将此属性完全拷贝一份,而浅克隆仅仅是拷贝一份此属性的引用。首先看几个容易犯的小问题
clone方法是Object类的,并不是Cloneable接口的,Cloneable只是一个标记接口,标记接口是用用户标记实现该接口的类具有某种该接口标记的功能,常见的标记接口有三个:Serializable、Cloneable、RandomAccess,没有实现Cloneable接口,那么调用clone方法就会报出CloneNotSupportedException异常。
Object类中的clone方法是protected修饰的,这就表明我们在子类中不重写此方法,就在子类外无法访问,因为这个protected权限是仅仅能在Object所在的包和子类能访问的,这也验证了子类重写父类方法权限修饰符可以变大但不能变小的说法。
1protected native Object clone() throws CloneNotSu ...
VMware虚拟机 CentOS7下ping不通的问题
前言最近学习 docker 需要搭个 Centos7 的环境,之前在笔记本上搭过,现在在台式电脑上搭的时候就直接把虚拟磁盘文件拷贝过来了,vm 启动当前虚拟机正常,就是没得网,经过一顿捣鼓之后,终于好了,在此记录一下这问题的解决过程!✍
12[root@localhost ~]# ping baidu.comping: baidu.com: 未知的名称或服务
解决方法在 VMware 虚拟机任务栏——编辑(E)——虚拟网络编辑器——VMnet8——查看本机的子网 ip,将其写入 ifcfg-ens33 文件里面的 ip 进行修改即可!
修改 ifcfg-ens33 文件
将 BOOTPROTO="dhcp" 改成 BOOTPROTO="static"
将 ONBOOT="on" 改成 ONBOOT="yes"
在后面加上
1234IPADDR=192.168.133.2 //此次不要设置成0,否则怎么调试都有问题NETMASK=255.255.255.0GATEWAY=192.168.133.2DN ...
CentOS7环境下安装Docker
先决条件系统要求在安装Docker Engine - Community之前,需要准备好CentOS 7的维护版本(不支持存档版本)。
该centos-extras库必须启用。默认情况下,此存储库已启用,但如果已将其禁用,则需要 重新启动。
而overlay2建议使用存储驱动程序。
卸载旧版本较旧版本的Docker被称为docker或docker-engine。如果已安装这些,请卸载它们以及相关的依赖项。
12345678$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装Docker E ...
如何解决Maven jar包冲突
依赖传递假设我们现在有一个多模块项目,依赖关系如图,我们在 st-web 模块中引入st-dal依赖时,st-common-lib 这个依赖也会被我们引入,这个就是依赖传递,下表中列出了 scope 在依赖过程中发生的变化,列标题为被依赖的模块的 scope
compile
test
provided
runtime
compile
compile
-
-
runtime
test
test
-
-
test
provided
provided
-
provided
provided
runtime
runtime
-
-
runtime
依赖仲裁依赖仲裁就是当项目中引入的jar包,groupId (公司域名倒过来)和artifactId (功能命令)一样,但是 version 不一样,应该选用哪一个 version ?也经常被人叫做依赖冲突
最短路径原则假如说我们现在的项目依赖关系如图?那么 maven 会选用 st-common-lib 的那个版本呢?
答案是1.1这个版本,st-web 到 st-common-lib(1.1) 的距离为1,st-w ...
工作一年反思
不知不觉,从去年毕业到现在已经一年了,回首这一年间,学到了不少东西,也认识到自己很多的不足。平时也没有写总结的习惯,最近借着项目发完版的这两天,对一年的工作进行总结,也希望自己能养成总结的好习惯。
心理—认识自我刚到公司的时候,我还是很慌的,毕竟我也知道自己 Java 方面的知识学得很一般,所幸得是,公司针对新员工有培训,这还是很友好的。其实要我说为什么要干软件开发,最直接的原因无非就是待遇好些,收入可观,然后自己也算是个夜猫子,觉得能熬得住!(头发多,要任性一点😏)
然而,随着在公司慢慢的发展以及在项目的投入,业务也就熟悉了,每天的话也从熟悉代码和业务过渡到了增删改查!
其实,增删改查在工作中也够用了,俗称就是混(反正有百度和谷歌,你懂的),每天上班一坐就是一天,一到敲代码就复制粘贴一顿梭哈。若是下班后花时间学习还好,否则的话真得很难精进。
😳有时候,我也蛮混的,每天按时上班,按时下班,工作也就简单的增删改查,但是这样对于现在的我来说,百害而无一利。
现在的年纪,已经是不能再马马虎虎生活工作的年纪了,再也不是心情一好起来 什么都会好起来的年纪。
上次看到还不以为意,现在 ...
Git Push 常见用法整理
git push的一般形式为 git push <远程主机名> <本地分支名>:<远程分支名>
例如 git push origin master:master ,即是将本地的 master 分支推送到远程主机 origin 上的对应 master 分支, origin 是远程主机名,
第一个 master 是本地分支名,第二个 master 是远程分支名。
git push origin master如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin :master如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin –delete master
git push origin如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git ...
Win10搭建Vagrant+VirtualBox环境
Vagrant是什么?Vagrant 是一个操作虚拟机的工具.是一个基于 Ruby 的工具,用于创建和部署虚拟化开发环境。 通过命令和配置文件来管理虚拟机,很快就能完成一套开发环境的部署,并可以打包传播,统一了开发环境,也解决了重复配置环境的麻烦。
Vargant的好处
Vagrant 会创建共享文件夹,用来在主机和虚拟机之间进行资源共享
Vagrant 通过添加 box 镜像进行快速部署,部署完毕后可以通过 package 进行打包分发,避免二次重建环境
Vagrant 可以使用 puppet、chref 等管理工具进行自动化配置部署
Vagrant 支持单机模拟多台机器,且支持一个配置文件Vagrantfile就可以跑分布式系统
准备工作
vagrant_2.2.5_x86_64.msi
VirtualBox-6.0.8-130520-Win.exe
vagrant-centos-7.box
进行安装安装VirtualBoxVirtualBox 安装就不多说了,一直下一步下一步就行了。
安装VagrantVargrant 下载win版的,然后一直下一步下一步就行了。
下载 ...
常用Git命令清单
我们每天都会使用 Git ,但是很多命令依旧记不住。(可能小乌龟用多了,哈哈😆)
一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。
下面是我整理的常用 Git 命令清单。几个专用名词的译名如下:
1234Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库
新建代码库12345678# 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url]
配置Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。
123456789# 显示当前的Git配置$ git config --list# 编辑Git配置文件$ git config -e [--global]# 设置提交代码时的用户信息$ git config [--global] user.name " ...