05 2019 档案
摘要:在项目开发中,会有多个环境,如在开发环境开发完,然后在测试环境测试,最后到生产环境,每个环境的配置是不一样的,如数据库配置:还好spring提供了一个管理配置的方式:
阅读全文
摘要:* 解释模式:用得极其少:此处用一个加法和乘法例子说明: * 模式特点:一个表达式接口(Expression)和多个实现类,表达式接口有个解释的方法interpret(); * 表达式接口的实现类分成2类: 非终结符表达式(NonterminalExpression),例如 加号就是非总结表达式,因
阅读全文
摘要:/** * 中介者模式:中介在生活中是很常见的,如房屋中介,使用了中介模式后,普通对象之间的交流就通过中介来进行,避免了相互进行依赖 * 模式特点:一个中介接口和其实现类,该实现类拥有所有的普通对象的引用 * 每个普通对象都引用一个中介对象 * */ //中介接口 public interface
阅读全文
摘要:/** * 访问者模式:就是不同的人(访问者)对同一种资源(衣服)下的不同分类的表现不一致:举个例子,小孩,男人,女人,去服装店里逛,对童装,男装,女装的感兴趣是不一样的; * 这里小孩,男孩,女人就是访问者,男装,女装,童装就是资源或者elment,服装店就是对象结构: * * 小孩逛商店:对童装
阅读全文
摘要:/** * 备忘录模式:也就是拥有反悔功能的模式:成员有3个 * 发起者Originator:一切围绕它转,它拥有自己的状态,可以给状态记录备份和恢复状态 * 备忘录Memento:记录发起者的状态,当发起者要恢复状态时,就调用它,前提是要先备份才能恢复 * 备忘录管理者Caretaker:备忘录创
阅读全文
摘要:/** * 命令模式:将方法的请求者跟方法的实现者进行分开,常见的例子:遥控器(命令发送者Invoker) 通过按钮(具体的命令Command) 来操作电视机(Receiver 命令接收者或者说是命令实现者) * 这样做的话,方法的请求者(遥控器)跟实现者(电视机)就分开了,解耦合了 * * */
阅读全文
摘要:/** * 责任链模式:最形象的例子就是过滤器,一个字符串,经过一连串的过滤器,最后得到想要的字符串,例如,过滤HTMl标签,过滤敏感字符,过滤特殊字符 * 模式特点: 一个过滤器接口,多个实现类,其中一个实现类叫过滤器链,它里面有个集合存所有的过滤器,执行过滤时,就是从集合中拿出一个个过滤器来执行
阅读全文
摘要:/** * 迭代器模式:java集合中有通过迭代器来遍历的方式,通过迭代器遍历,隐藏了容器内部的组成,而普通的forEach遍历,是可以知道组成是啥的;此处模拟迭代器的实现; * 迭代器最重要的2个方法:hasNext(),next(),通过自定义一个集合,集合内部集成迭代器来遍历自定义集合 * *
阅读全文
摘要:/** * 观察者模式:就是一个发布订阅模型,有多个观察者和一个被观察者,被观察者状态改变,通知观察者 * 特点:一个被观察者,多个观察者,被观察者有个集合存储注册的观察者,被观察者提供注册,注销,通知功能 *此处以银行发工资为例子 * */ //被观察者,银行 public class Bank
阅读全文
摘要:/** * 状态模式:跟策略模式很像,只不过策略模式是根据行为来判断的,而状态模式是根据状态来判断的:例如猪有睡觉和醒来2种状态,睡觉就会做梦.醒来就会吃东西 * 模式特点:一个状态接口和多个状态实现类 ,一个上下文类,状态对象以组合的方式作为属性到上下文类中 * * * * */ //状态接口 p
阅读全文
摘要:/** * 策略模式:需求:景点卖票,如果是儿童免票,成人原价,学生半价,如果要实现这个效果,并且将来非常容易拓展,那么就可以使用策略模式,策略模式 * 就是将不同的算法抽取出来,每个算法都是平行的.跟if--else if--else if一样,每个算法都是互相平行个关系,将来要新增一个算法,只要
阅读全文
摘要:/** * 模板模式:一个抽象类,提供一个固定的方法,该方法使用final修饰,方法里面的实现调用了其他抽象方法,抽象方法留给子类实现 * 这样,这个final修饰的方法就是模板方法,它提供了做这个事情的方法步骤,只是具体的步骤根据不同子类的不同实现来决定 * * */ public abstrac
阅读全文
摘要:/** * 享元模式:简单点说就是使用了缓存的方式,用map或list来存已经创建的对象,获取的时候直接从map或者list中获取就行了,获取不到再new出来,然后再存进去; * 用到的地方有各种常量池,Short在jdk中-128到127的值是缓存在一个数组中,这里使用一个Map简单模拟下缓存模式
阅读全文
摘要:/** * 桥接模式:按资料说是将抽象和实现分离,这个很难理解,此处不深究定义;下面举个例子说明白 * 如果形状有长方形,正方形,圆形,颜色有红色和绿色,那么他们的组合就有3x2=6种 如果我们定义6个类去实现,那显然不合理,例如增加了一个形状,那就有4x2=8种了, * 伪代码实现上面的方式: p
阅读全文
摘要://飞机 public class Plane { public void buyTicket(){ System.out.println("订购飞机票"); } } //火车 public class Train { public void buyTicket(){ System.out.prin
阅读全文
摘要:/** * 动态代理类:先参考代理模式随笔,了解代理模式的概念,分为jdk动态代理和cglib,jdk动态代理是通过实现接口的方式创建代理类的,cglib是通过继承类的方式实现的代理类的 * jdk动态代理需要用到jdk自带的一个类Proxy来生成代理类,还需要一个提供执行方法的执行接口Invoca
阅读全文
摘要:/** * 代理模式:跟装饰器模式代码和机构一样,只是偏向不一样(装饰器是对被装饰类的功能增强,不会阻止被装饰器的原本功能),代理类强调的完全控制被代理类, * 只有业务意义上的区别,实现模式是一样的: * 一个接口,2个实现类,其中一个是代理类,代理类通过组合方式持有被代理类 * * */ //父
阅读全文
摘要:/** *组合模式:一个对象的属性是另一个对象,这就是组合模式了,应该是最常用的模式了: * 如学校对象,学校里面有多个班级,这样就可以将班级组合到学校里面了 * * */ public class School { private List<Class> classes; public List<
阅读全文
摘要:/** * 装饰模式(包装模式),如果想扩展一个类,而不愿意继承该类,此时可以对其进行包装,此处以包装一个华为电脑为例,给其增加16G内存. * 模式:一般被包装类和包装类会实现同一个接口,然后被包装类对象作为包装类的一个属性 * * */ //包装类和被包装类需要实现的接口 public inte
阅读全文
摘要:/** * 适配器模式:通过一个类(适配器 adapter)来把2个不同的类或者接口的功能组装在一起; * 模式例子:有个Mp4类,里面有个听音乐的方法,还有一个TV类,里面有个看电视的方法,那么如果让MP4类继承TV类是可以实现相应的效果(或者使用组合模式,TV作为MP4的属性),但他们没有业务上
阅读全文
摘要:/** * 原型模式:其实就是对象的克隆,分为浅克隆和深克隆:浅克隆:对象的属性假如也是一个对象的话,那么拷贝的是属性对象的引用,克隆出来的对象对该属性的修改会影响原来对象的属性; * 深拷贝的话,要同时拷贝属性才行;深拷贝的另外一种方式是序列化和反序列化 * *///浅拷贝实现如下 public
阅读全文
摘要:/** * 建造者模式:一般用于复杂的对象创建,例如一个对象的多个属性都是对象,或者对象的属性太多,使用构造器初始化,参数太长,容易写错哪个参数是什么意思 * 角色:产品--产品创建者--指挥者 * 产品:如自行车:包含坐垫,轮胎等 * 创建者:组装自行车:步骤组装坐垫,组装轮胎,最后返回产品对象
阅读全文
摘要://单例 饿汉模式:创建一个静态实例,私有化构造器,这个是线程安全的 public class Sington { private static final Sington INSTANCE=new Sington(); //私有化构造器 private Sington(){ } public Si
阅读全文
摘要:/** * 抽象工厂方法:抽象工厂方法是在普通工厂方法上进行扩展的,普通工厂每个工厂类只会生产一种产品,例如富士康只生产iphone,而抽象工厂就是 * 一个工厂可以生产多种产品,例如,富士康可以生产苹果手机,也可以生产苹果耳机 * 该模式特点:1.有多种产品的接口以及对应的实现类(如手机接口,实现
阅读全文
摘要:/** * 普通工厂方法:每个对象都会有一个工厂类进行生产,例如小米手机由纬创公司代工生产,苹果手机由富士康代工生产,也就是每个工厂只会生产一种对象 * 模式特点:1.拥有一个对象接口(手机接口)和该对象接口的几个实现类(小米手机,苹果手机) * 2.拥有一个工厂接口(手机工厂)和该接口的几个实现类
阅读全文
摘要:/** * 简单工厂,简单在于只有一个工厂方法就可以生产对应的对象,通过工厂方法,存入对应的对象名字进行匹配,一般工厂方法都是静态的,所以也叫静态工厂方法 * 缺点是:每添加一个子类,就要改下工厂方法的代码,拓展性不强 * 本次使用富士康生产苹果手机和小米手机为例子,富士康就是一个工厂,要生产苹果手
阅读全文
摘要:import java.util.Arrays; public class Test { public static void main(String[] args) { int[]a={100,5,8,9,2,12,3,89,0,65,5,8,12,1}; a = insetSort(a); System.out.println(Ar...
阅读全文
摘要:import java.util.Arrays; public class Test { public static void main(String[] args) { int[]a={100,5,8,9,2,12,3,89,0,65,5,8,12,1}; a = bubbleSort(a); System.out.println(A...
阅读全文
摘要:public class Test { public static void main(String[] args) { int[]a={1,5,8,9,11,12,56,89}; int i = binarySearch(a, 56); System.out.println(i); } /** * 又叫折半查...
阅读全文
摘要:import java.util.List; /** * 背景: 平常定义变量:String name,这里变化的是值,类型是不会变,指定为String,如果需要类型也能变化呢?此时泛型就登场了: * 泛型: * T name:此时类型是变化的,如可以是String ,也可以是其他任意的类型变量,如StringBuffer,因此泛型其实就是变化的类型 * 泛型的使用:用在类上和用在方法...
阅读全文