摘要: 定义 其思想是针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能 类图 实例 毕业季,同学们面临很多选择: 工作、出国深造、考研... Michael刚开始的时候选择的工作,但是工作两 阅读全文
posted @ 2019-09-16 13:11 Code&Fight 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 观察者模式 定义 观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。 类图 例子 假设由这样一个例子,大家都比较关注房价,所以关注了一个网站,利用rss订阅。当有新的动态更新时,所有订阅的用户就会收到最新的消息。 定义主题及其实现House 阅读全文
posted @ 2019-08-09 22:02 Code&Fight 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 装饰者模式 1. 定义 装饰者模式 动态的将责任附加到对象上。如要扩展功能,装饰者提供了比继承更有弹性的替代方案。 2. 类图 3. Example 假如有这样一个需求:有一天,奶茶店的老板喊你给他们做一个简单版的计算价格程序。新店开张,供应的饮料有奶茶(8元)、红茶(7元)、绿茶(5元)三种,提供 阅读全文
posted @ 2019-08-09 00:13 Code&Fight 阅读(184) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch 通常情况下,countDown如下调用 看一下countDown方法: AQS中releaseShared方法如下: CountDownLatch中tryReleaseShared方法如下: 来看doReleaseShared()方法: 不过尴尬的是,CountDown 阅读全文
posted @ 2019-08-08 22:46 Code&Fight 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 适配器模式 适配器模式 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 Example: 指鹿为马 假设由鹿和马的类: 以及各自实现黑马和白鹿(话说《白鹿原》这本书还可以的,陈忠实先生的叙述引人入胜): 看下鹿的适配器, 通过测试程序,来见证奇迹: 我们发现输出 阅读全文
posted @ 2019-08-03 18:55 Code&Fight 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 模板方法 模式 定义: 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 一个例子 假设有咖啡和茶两个类: 我们发现沏茶和冲咖啡的过程有些是一样的,有些不一样。 prepareRecipe作为模板方法,抽取一个抽象类: 阅读全文
posted @ 2019-08-03 18:13 Code&Fight 阅读(157) 评论(0) 推荐(0) 编辑
摘要: AQS 内部类Node 等待队列是CLH有锁队列的变体。 waitStatus的几种状态: 以下面的测试程序为例,简单介绍一下同步队列的变化: java @Test public void test() { CountDownLatch countDownLatch = new CountDownL 阅读全文
posted @ 2019-08-02 20:32 Code&Fight 阅读(178) 评论(0) 推荐(0) 编辑
摘要: ThreadPoolExecutor 1. ctl(control state) 线程池控制状态,包含两个概念字段:workerCount(线程有效数量)和runState(表示是否在运行、关闭等状态) workerCount限制到2^29 1 (5亿左右) runstate有如下几个状态: RUN 阅读全文
posted @ 2019-08-02 20:31 Code&Fight 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 一些容易混淆的知识点 1. sleep vs wait sleep是Thread,wait是Object方法 wait和notify只能在同步代码块中调用 wait释放锁资源,sleep不释放锁资源 唤醒条件:wait通过notify或者notifyAll,sleep超时或者调用interrupt方 阅读全文
posted @ 2019-08-02 20:30 Code&Fight 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 创建线程有几种方式: 1. 自定义类继承Thread(如下面的AThread),然后使用Thread.start方法启动线程 2. 创建类,实现Runnable,通过Thread的构造函数来启动,有时也用于ThreadPoolExecutor线程池的一些execute方法中 3. Callable, 阅读全文
posted @ 2019-07-14 00:05 Code&Fight 阅读(172) 评论(0) 推荐(0) 编辑