随笔分类 -  设计模式

摘要:* 解释模式:用得极其少:此处用一个加法和乘法例子说明: * 模式特点:一个表达式接口(Expression)和多个实现类,表达式接口有个解释的方法interpret(); * 表达式接口的实现类分成2类: 非终结符表达式(NonterminalExpression),例如 加号就是非总结表达式,因 阅读全文
posted @ 2019-05-29 17:47 yangxiaohui227 阅读(132) 评论(0) 推荐(0) 编辑
摘要:/** * 中介者模式:中介在生活中是很常见的,如房屋中介,使用了中介模式后,普通对象之间的交流就通过中介来进行,避免了相互进行依赖 * 模式特点:一个中介接口和其实现类,该实现类拥有所有的普通对象的引用 * 每个普通对象都引用一个中介对象 * */ //中介接口 public interface 阅读全文
posted @ 2019-05-29 14:19 yangxiaohui227 阅读(248) 评论(0) 推荐(0) 编辑
摘要:/** * 访问者模式:就是不同的人(访问者)对同一种资源(衣服)下的不同分类的表现不一致:举个例子,小孩,男人,女人,去服装店里逛,对童装,男装,女装的感兴趣是不一样的; * 这里小孩,男孩,女人就是访问者,男装,女装,童装就是资源或者elment,服装店就是对象结构: * * 小孩逛商店:对童装 阅读全文
posted @ 2019-05-29 11:11 yangxiaohui227 阅读(267) 评论(0) 推荐(0) 编辑
摘要:/** * 备忘录模式:也就是拥有反悔功能的模式:成员有3个 * 发起者Originator:一切围绕它转,它拥有自己的状态,可以给状态记录备份和恢复状态 * 备忘录Memento:记录发起者的状态,当发起者要恢复状态时,就调用它,前提是要先备份才能恢复 * 备忘录管理者Caretaker:备忘录创 阅读全文
posted @ 2019-05-28 17:40 yangxiaohui227 阅读(175) 评论(0) 推荐(0) 编辑
摘要:/** * 命令模式:将方法的请求者跟方法的实现者进行分开,常见的例子:遥控器(命令发送者Invoker) 通过按钮(具体的命令Command) 来操作电视机(Receiver 命令接收者或者说是命令实现者) * 这样做的话,方法的请求者(遥控器)跟实现者(电视机)就分开了,解耦合了 * * */ 阅读全文
posted @ 2019-05-28 15:18 yangxiaohui227 阅读(124) 评论(0) 推荐(0) 编辑
摘要:/** * 责任链模式:最形象的例子就是过滤器,一个字符串,经过一连串的过滤器,最后得到想要的字符串,例如,过滤HTMl标签,过滤敏感字符,过滤特殊字符 * 模式特点: 一个过滤器接口,多个实现类,其中一个实现类叫过滤器链,它里面有个集合存所有的过滤器,执行过滤时,就是从集合中拿出一个个过滤器来执行 阅读全文
posted @ 2019-05-28 12:01 yangxiaohui227 阅读(125) 评论(0) 推荐(0) 编辑
摘要:/** * 迭代器模式:java集合中有通过迭代器来遍历的方式,通过迭代器遍历,隐藏了容器内部的组成,而普通的forEach遍历,是可以知道组成是啥的;此处模拟迭代器的实现; * 迭代器最重要的2个方法:hasNext(),next(),通过自定义一个集合,集合内部集成迭代器来遍历自定义集合 * * 阅读全文
posted @ 2019-05-28 10:53 yangxiaohui227 阅读(79) 评论(0) 推荐(0) 编辑
摘要:/** * 观察者模式:就是一个发布订阅模型,有多个观察者和一个被观察者,被观察者状态改变,通知观察者 * 特点:一个被观察者,多个观察者,被观察者有个集合存储注册的观察者,被观察者提供注册,注销,通知功能 *此处以银行发工资为例子 * */ //被观察者,银行 public class Bank 阅读全文
posted @ 2019-05-28 10:05 yangxiaohui227 阅读(109) 评论(0) 推荐(0) 编辑
摘要:/** * 状态模式:跟策略模式很像,只不过策略模式是根据行为来判断的,而状态模式是根据状态来判断的:例如猪有睡觉和醒来2种状态,睡觉就会做梦.醒来就会吃东西 * 模式特点:一个状态接口和多个状态实现类 ,一个上下文类,状态对象以组合的方式作为属性到上下文类中 * * * * */ //状态接口 p 阅读全文
posted @ 2019-05-27 17:48 yangxiaohui227 阅读(81) 评论(0) 推荐(0) 编辑
摘要:/** * 策略模式:需求:景点卖票,如果是儿童免票,成人原价,学生半价,如果要实现这个效果,并且将来非常容易拓展,那么就可以使用策略模式,策略模式 * 就是将不同的算法抽取出来,每个算法都是平行的.跟if--else if--else if一样,每个算法都是互相平行个关系,将来要新增一个算法,只要 阅读全文
posted @ 2019-05-27 11:44 yangxiaohui227 阅读(114) 评论(0) 推荐(0) 编辑
摘要:/** * 模板模式:一个抽象类,提供一个固定的方法,该方法使用final修饰,方法里面的实现调用了其他抽象方法,抽象方法留给子类实现 * 这样,这个final修饰的方法就是模板方法,它提供了做这个事情的方法步骤,只是具体的步骤根据不同子类的不同实现来决定 * * */ public abstrac 阅读全文
posted @ 2019-05-24 15:12 yangxiaohui227 阅读(92) 评论(0) 推荐(0) 编辑
摘要:/** * 享元模式:简单点说就是使用了缓存的方式,用map或list来存已经创建的对象,获取的时候直接从map或者list中获取就行了,获取不到再new出来,然后再存进去; * 用到的地方有各种常量池,Short在jdk中-128到127的值是缓存在一个数组中,这里使用一个Map简单模拟下缓存模式 阅读全文
posted @ 2019-05-24 14:33 yangxiaohui227 阅读(122) 评论(0) 推荐(0) 编辑
摘要:/** * 桥接模式:按资料说是将抽象和实现分离,这个很难理解,此处不深究定义;下面举个例子说明白 * 如果形状有长方形,正方形,圆形,颜色有红色和绿色,那么他们的组合就有3x2=6种 如果我们定义6个类去实现,那显然不合理,例如增加了一个形状,那就有4x2=8种了, * 伪代码实现上面的方式: p 阅读全文
posted @ 2019-05-24 12:13 yangxiaohui227 阅读(138) 评论(0) 推荐(0) 编辑
摘要://飞机 public class Plane { public void buyTicket(){ System.out.println("订购飞机票"); } } //火车 public class Train { public void buyTicket(){ System.out.prin 阅读全文
posted @ 2019-05-24 10:23 yangxiaohui227 阅读(130) 评论(0) 推荐(0) 编辑
摘要:/** * 动态代理类:先参考代理模式随笔,了解代理模式的概念,分为jdk动态代理和cglib,jdk动态代理是通过实现接口的方式创建代理类的,cglib是通过继承类的方式实现的代理类的 * jdk动态代理需要用到jdk自带的一个类Proxy来生成代理类,还需要一个提供执行方法的执行接口Invoca 阅读全文
posted @ 2019-05-23 18:11 yangxiaohui227 阅读(212) 评论(0) 推荐(0) 编辑
摘要:/** * 代理模式:跟装饰器模式代码和机构一样,只是偏向不一样(装饰器是对被装饰类的功能增强,不会阻止被装饰器的原本功能),代理类强调的完全控制被代理类, * 只有业务意义上的区别,实现模式是一样的: * 一个接口,2个实现类,其中一个是代理类,代理类通过组合方式持有被代理类 * * */ //父 阅读全文
posted @ 2019-05-23 16:25 yangxiaohui227 阅读(111) 评论(0) 推荐(0) 编辑
摘要:/** *组合模式:一个对象的属性是另一个对象,这就是组合模式了,应该是最常用的模式了: * 如学校对象,学校里面有多个班级,这样就可以将班级组合到学校里面了 * * */ public class School { private List<Class> classes; public List< 阅读全文
posted @ 2019-05-23 16:00 yangxiaohui227 阅读(123) 评论(0) 推荐(0) 编辑
摘要:/** * 装饰模式(包装模式),如果想扩展一个类,而不愿意继承该类,此时可以对其进行包装,此处以包装一个华为电脑为例,给其增加16G内存. * 模式:一般被包装类和包装类会实现同一个接口,然后被包装类对象作为包装类的一个属性 * * */ //包装类和被包装类需要实现的接口 public inte 阅读全文
posted @ 2019-05-23 15:45 yangxiaohui227 阅读(116) 评论(0) 推荐(0) 编辑
摘要:/** * 适配器模式:通过一个类(适配器 adapter)来把2个不同的类或者接口的功能组装在一起; * 模式例子:有个Mp4类,里面有个听音乐的方法,还有一个TV类,里面有个看电视的方法,那么如果让MP4类继承TV类是可以实现相应的效果(或者使用组合模式,TV作为MP4的属性),但他们没有业务上 阅读全文
posted @ 2019-05-23 14:37 yangxiaohui227 阅读(114) 评论(0) 推荐(0) 编辑
摘要:/** * 原型模式:其实就是对象的克隆,分为浅克隆和深克隆:浅克隆:对象的属性假如也是一个对象的话,那么拷贝的是属性对象的引用,克隆出来的对象对该属性的修改会影响原来对象的属性; * 深拷贝的话,要同时拷贝属性才行;深拷贝的另外一种方式是序列化和反序列化 * *///浅拷贝实现如下 public 阅读全文
posted @ 2019-05-23 12:04 yangxiaohui227 阅读(135) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示