设计模式
大浪中航行
这个作者很懒,什么都没留下…
展开
-
观察者模式
观察者模式由Subject与Observer组成,它们的主要接口如下:interface Subject{ // 添加一个观察者 void registerObserver(Observer observer); // 移除一个观察者 void removeObserver(Observer observer); // 通知所有注册的Observ...原创 2018-06-13 21:32:49 · 156 阅读 · 0 评论 -
代理模式
静态代理即,代理类与被代理类都实现一个统一的接口,或继承相同的父类 静态代理能够在不修改被代理类的情况下,对其功能进行扩展。 但是因为要依赖接口,如果项目中希望通过代理的方式来实现日志记录,那岂不是每个类都要定义一个接口?public class StaticProxyDriver { // 首先定义一个接口,供代理类与被代理类实现 static interface A...原创 2018-06-24 12:13:35 · 174 阅读 · 0 评论 -
装饰者模式
观察者模式的精髓是,装饰者与被装饰者都源于同一个父类。 装饰者对父类方法的实现是基于被装饰者的,如DisCount的cost方法需要用到HotGoods的cost方法。 除了折扣,还有奶茶与珍珠、椰果;手抓饼与烤肠、鸡蛋等场景。 共同点是折扣、珍珠、椰果、烤肠、鸡蛋不会单卖,都需要依赖商品、奶茶、手抓饼,即在价格上对主要商品进行装饰。public class DecoratorPatte...原创 2018-06-17 15:49:01 · 168 阅读 · 0 评论 -
实战Java高并发程序设计——单例模式
单例模式是设计模式中使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只有一个实例。这种模式有一下两个好处: 1.对于使用频繁地对象,可以省略new操作花费的时间。特别是对于那些重量级对象而言,能够节省很多系统开销。 2.由于new操作的频率减少,系统内存的使用频率也会降低。这将减少JVM的GC压力。 下面来看一种单例实现public原创 2017-07-25 12:48:21 · 1122 阅读 · 0 评论 -
命令模式
命令模式能够封装一系列操作,然后对外给出一个统一的接口,如execute,从而方便执行类可以进行统一的处理,而不同考虑不同操作的差异;实际的场景有工作队列、线程池、日志安排。多线程的run方法就是一个命令模式的典范。 下面会模拟两组不同的操作 1. 开关灯 2. 煮饭——淘米、加水、放入锅子、开火public class CommandPatternDriver { static...原创 2018-06-17 22:29:30 · 167 阅读 · 0 评论 -
适配器模式
适配器模式的主要作用是,将一个接口,转换成另一个接口。 说的在直白点,就是有两个名字、功能、属性、方法的不同的类,使得其中的一个,能通过适配器,能看起来像(实际的实现上一般是由差异的)另一个。 给一个例子:在java中,早起的Collection有一个elements()方法,通过枚举类来遍历集合集合中的所有元素;但现在都用Iterator,为了避免之前用elements()方法的地方报错,因...原创 2018-06-18 12:04:54 · 179 阅读 · 0 评论 -
模板方法模式
模板方法模式一般用于流程处理,它能够定义一套流程的框架,然后由子类来实现每一个步骤具体的操作。 通俗一点,就是父类定义一系列接口,并固定这些接口的调用次序;子类只能够细化每一步,无法改变(也不需要改变)这些步骤的执行次序。 下面我们通过一个例子来感受一下: 我们要实现两个流程上大致一样的操作:烧一条红烧鱼、做一斤小龙虾。我们先抽象一下这两道菜的公共流程: 1. 杀死它们 2. 把它们弄...原创 2018-06-18 14:16:23 · 171 阅读 · 0 评论 -
迭代器模式
迭代器模式主要用于,对于数组、List、Set等记录多个元素的数据结构,给出一种统一的遍历方式。 大家不要因为有for(Object o :objects)这个for-each的语法糖的存在,而认为这个模式没用,其实for-each正是使用了Iterator。 下面写一个简单的例子感受一下,当然为了突出Iterator的作用,在这里也没用for-each。public class Iter...原创 2018-06-19 21:55:53 · 287 阅读 · 0 评论