![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
rensheng_ruxi
程序员
展开
-
了解设计模式:23备忘录模式
1.核心:保存某个对象内部状态的拷贝,以后可以将该对象恢复到原先的状态。 结构:源发器类,备忘录类,负责人类2.代码实现/** * 源发器类 * @author Administrator * */public class Emp { private String ename; private int age; private double salary; ...原创 2020-04-03 20:48:53 · 116 阅读 · 0 评论 -
了解设计模式:22观察者模式
1.核心:观察者模式主要用于1:N的通知。当一个对象(目标对象Subject或Objservable)的状态变化时,需要及时告知一系列对象(观察者对象Observer),令他们做出响应。通知观察者的方式:推,拉2.代码实现//观察者public interface Observer { void update(Subject subject);}public class Obs...原创 2020-04-02 21:24:17 · 89 阅读 · 0 评论 -
了解设计模式:21状态模式
1.场景 -电梯的运行:维修,正常,自动关门,自动开门,向上运行,向下运行,消防状态 -红绿灯:红灯,黄灯,绿灯 -网上购物,订单状态:下单,已付款,已发货,送货中,已收货2.核心及结构 -核心:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题 -结构:Context环境类(维护State),State抽象环境类,ConcreteS...原创 2020-04-02 21:11:02 · 120 阅读 · 0 评论 -
了解设计模式:20模板方法模式
1.介绍:经常用到。定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。2.核心:处理某个流程的代码已经具备,但是其中某个节点的代码暂时不能确定。因此,采用工厂方法模式,将这个节点的代码实现转移给子类完成。即:处理步骤父类中定义好,具体实现延迟到子类中定义。3.代码实现public abstract class...原创 2020-04-01 20:58:03 · 110 阅读 · 0 评论 -
了解设计模式:19策略模式
1.介绍:策略模式对应于解决某一个问题的一个算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便的更换算法或者增加新的算法,并且由客户端决定调用哪个算法。本质:分离算法2.代码实现//报价接口public interface Strategy { public double getPrice(double standardPrice);}//新客户少量批发pub...原创 2020-04-01 20:41:13 · 186 阅读 · 0 评论 -
了解设计模式:1718解释器和访问者模式
1.解释器模式介绍:是一种不常用的设计模式。用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的解释器和解释器设计。当需要开发一种新的语言时,可以考虑使用解释器模式。尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中可以使用Jruby,Groovy,java的js引擎来替代解释器的作用,弥补java语言的不足。2.应用场景 -EL表达式的处理 -正则表达...原创 2020-03-31 20:54:15 · 129 阅读 · 0 评论 -
了解设计模式:16命令模式
1.介绍:命令模式将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作,也称为:动作Action模式、事务transaction模式。2.结构 -Command抽象命令类 -ConcreteCommand具体命令类 -Invoker调用者/请求者 -Receiver接收者 3.代码实...原创 2020-03-31 20:36:02 · 107 阅读 · 0 评论 -
了解设计模式:15中介者模式
1.核心: -系统中对象之间的联系呈现为网状结构,对象之间存在大量的多对多关系,将导致关系及其复杂,这些对象称为“同事对象” -可引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为星形结构。2.代码实现//中介者接口public interface Mediator { void register(String dname,Depa...原创 2020-03-28 20:25:56 · 101 阅读 · 0 评论 -
了解设计模式:14迭代器模式
1.场景 -提供一种可以遍历聚合对象的方式。又称为游标cursor模式 -聚合对象:存储数据 -迭代器:遍历数据2.代码实现/** * 自定义的迭代器接口 * @author Administrator * */public interface MyIterator { void first(); //将游标指向第一个元素 void next...原创 2020-03-28 19:55:14 · 89 阅读 · 0 评论 -
了解设计模式:13责任链模式
1.定义:能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,不能则传递给链上的下一个对象。2.场景 -打牌时,轮流出牌 -接力赛跑 -奖学金审批3.代码实现//模拟请假审批流程//请假对象public class LeaveRequest { private String empNam...原创 2020-03-27 21:01:37 · 128 阅读 · 0 评论 -
了解设计模式:12享元模式
1.场景:有多个完全相同或相似的对象,可通过享元模式,节省内存。2.核心:以共享的方式高效的支持大量细粒度对象的重用。享元对象能做到共享的关键是区分了内部状态和外部状态。 -内部状态:可以共享,不会随环境变化而改变。 -外部状态:不可以共享,会随环境变化而改变。3.享元模式实现: -FlyweightFactory享元工厂类(创建并管理享元对象,享元池一般设计...原创 2020-03-27 20:24:11 · 109 阅读 · 0 评论 -
了解设计模式:11外观模式
1.迪米特法则(最少知识原则) -一个软件实体应当尽可能少的与其他实体发生相互作用。2.外观模式核心 -为子系统提供统一的入口。封装子系统的复杂性,便于客户端调用。3.类图4.应用场景 频率很高。有外观模式的使用,如:JDBC封装后,commons提供的DBUtils类,Hibernate提供的工具类、Spring JDBC工具类等...原创 2020-03-26 21:39:33 · 65 阅读 · 0 评论 -
了解设计模式:10装饰模式
1.职责 1)动态的为一个对象增加新的功能。 2)装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。2.实现细节 1)Component抽象构件角色:真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰对象交互。 2)Concre...原创 2020-03-26 21:19:59 · 75 阅读 · 0 评论 -
了解设计模式:9组合模式
1.场景 把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。2.组合模式核心 1)抽象构件(Component)角色:定义了叶子和容器构件的共同点 2)叶子(Leaf)构件角色:无子节点 3)容器(Composite)构件角色:有容器特征,可以包含子节点3.代码实现//简单展示/** * 抽象...原创 2020-03-25 21:44:41 · 190 阅读 · 0 评论 -
了解设计模式:8桥接模式
1.场景:当产品有复杂的信息时,如图,实现这样的关系,可以使用多层继承关系,但扩展会造成类个数膨胀,并且违反单一职责原则。 我们可以将产品划分为两个维度,两个维度分别创建类,再搭设桥梁将两个类联系,构成产品,易于扩展,保证单一职责。...原创 2020-03-25 21:03:34 · 112 阅读 · 0 评论 -
了解设计模式:7代理模式
1.代理模式核心作用:通过代理,控制对对象的访问!可以详细控制访问某个对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理(即AOP的微观实现)。AOP(Aspect Oriented Programming面向切面编程)的核心实现机制!2.核心角色 抽象角色:定义代理角色和真实角色的公共对外方法 真实角色:实现抽象角色,定义真是角色所要实现的业务逻辑,供代理角...原创 2020-03-21 21:49:43 · 192 阅读 · 0 评论 -
了解设计模式:6适配器模式
1.结构型模式核心作用:从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。 分类:适配器模式,代理模式,桥接模式、装饰模式、组合模式、外观模式、享元模式2.适配器模式介绍:将一个类的接口转换成客户希望的另外一个接口。使原本由于接口不兼容而不能一起工作的类可以一起工作。 角色:目标接口(target)(客户期待的接口),需要适配的类(Adaptee),适...原创 2020-03-21 21:12:09 · 86 阅读 · 0 评论 -
了解设计模式:5原型模式
1.介绍 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。是java中的克隆技术,以某个对象为原型,复制出新的对象。优势:效率高(直接克隆,避免了重新执行构造过程步骤)。new创建新的对象属性采用的是默认值,克隆出的对象的属性值完全和原型对象相同,并且不会影响原型对象。2.原型模式实现 Cloneable接口和clone方法(clone属...原创 2020-03-21 16:27:31 · 86 阅读 · 0 评论 -
了解设计模式:4建造者模式
1.介绍 1)场景:建造一个复杂的产品。 2)本质:分离了对象子组件的单独构造(Builder)和装配(Director),从而可以构造出复杂的对象。适用于某个对象的构建过程复杂;实现了构造和装配的解耦,不同的构造器,相同的装配,可以做出不同的对象,相同额构造器,不同的装配也可以做出不同的对象。也就思想了构造算法和装配算法的解耦,实现了更好的复用。2.实现代...原创 2020-03-21 11:38:17 · 77 阅读 · 0 评论 -
了解设计模式:23工厂模式和抽象工厂模式
1.工厂模式实现了创建这和调用者的分离。 详细分类:简单工厂模式(静态工厂模式),工厂方法模式,抽象工厂模式2.简单工厂实现public interface Car { void run();}public class Audi implements Car { @Override public void run() { System.out.println...原创 2020-03-19 21:18:31 · 104 阅读 · 0 评论 -
了解设计模式:1单例模式
1.核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。2.常见应用场景: 1)Windows的Task Manager(任务管理器) 2)Windows的Recycle Bin(回收站) 3)项目中读取配置文件的类(没有必要每次使用配置文件数据,每次new一个对象去读取) 4)网站的计数器(否则难以同步) 5)应用程序的日志...原创 2020-03-18 22:28:28 · 116 阅读 · 0 评论 -
java设计六大原则
类的设计原则 依赖倒置原则-Dependency Inversion Principle (DIP) 里氏替换原则-Liskov Substitution Principle (LSP) 接口分隔原则-Interface Segregation Principle (ISP) 单一职责原则-Single Responsibility Principle (SRP) ...转载 2018-09-28 09:15:00 · 4985 阅读 · 0 评论 -
快速理解Java中的五种单例模式
解法一:只适合单线程环境(不好)package test;/** * @author xiaoping * */public class Singleton { private static Singleton instance=null; private Singleton(){ } public static Singleton...转载 2018-10-19 13:25:34 · 83 阅读 · 0 评论 -
java中常见的设计模式及简单示例
1.单例设计模式 所谓单例设计模式简单说就是无论程序如何运行,采用单例设计模式的类(Singleton类)永远只会有一个实例化对象产生。具体实现步骤如下: (1) 将采用单例设计模式的类的构造方法私有化(采用private修饰)。 (2) 在其内部产生该类的实例化对象,并将其封装成private static类型。 (3) 定义一个静态方法...转载 2018-11-13 16:34:41 · 144 阅读 · 0 评论 -
验证字符串是否以某个字符串开始
1.String类中的startsWith(String str,int b):使用方法:flag=c.startsWith(str,b)。说明:验证字符串c从位置b开始是否以str为前缀,是返回true,否返回false。 boolean startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串...原创 2018-11-23 09:50:32 · 1975 阅读 · 0 评论 -
copy一个集合的方法(深度拷贝和浅度拷贝)
1.复制一个集合的方法分为深度拷贝和浅度拷贝,像平常list集合的addAll()和map的直接赋值,都是浅度拷贝,例如: list1.addAll(list); map1=map;2.有时,我们需要多次使用原集合的值,为了避免对原集合产生影响,我们需要用到深度拷贝,深度拷贝就是将集合中的数据一一取出,再放到新集合中。这里以map作为例子,listmap是一个list集合,...原创 2019-04-02 11:09:52 · 2184 阅读 · 0 评论 -
java不区分大小写的map集合
1.一个项目经过多人开发,有时传值就会不注意大小写,导致常用方法必须传两遍,传一遍大写,传一遍小写,字段一多就会很麻烦,为了节省时间,可以使用下面的集合:CaseInsensitiveMap—不区分大小写的无序map;LinkedCaseInsensitiveMap—不区分大小写的有序map;例如:import org.apache.commons.collections.map...原创 2019-04-18 17:19:00 · 4251 阅读 · 0 评论 -
java检查文件的编码格式
近来碰到需要判断文件的编码格式,根据编码格式读取文件,网上百度了好几种方法,遂分享一下。1.通过文件的前三个字节判断(可用,但据百度说正确率不高):public static String codeString(String fileName) throws Exception { BufferedInputStream bin = new BufferedInputSt...原创 2019-09-20 17:08:09 · 2635 阅读 · 0 评论 -
工具:java根据第一张表制作第二张表的主键(在一个字符串的基础上增加位数,有顺序)
1.我根据实际实况说明,两张有联系的表,为了避免创建很多字段,可以在第一张表的主键基础上增加几位作为第二张表的主键,这几位是有顺序的。java方法如下,传参需要第二张表的表名,第一张表的主键,第二张表相关记录的最大主键,例如:eb592e35c51c4dfb89300448c80d3a400003,第一张表的主键是前32位,0003是后增加的4位,那么我需要再增加主键为eb592e35c51c4d...原创 2018-09-27 10:01:07 · 239 阅读 · 0 评论