- 浏览: 26202 次
- 性别:
- 来自: 北京
文章列表
Synchronized深入理解
- 博客分类:
- java锁
深入理解 Synchronized 原理前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。
数据同步需要 ...
thread之join
- 博客分类:
- JAVA多线程
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。或者说join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。
方法:
t.join(); //使调用线程 t 在此之前执行完毕。t.join(1000); //等待 t 线程,等待时间是1000毫秒
public class TestThreadJoin {
public static void main(String[] args){
System.o ...
设计原则之Hollywood principle
- 博客分类:
- 设计原则
单一职责原则(Single Responsibility Principle)
定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
问题由来:类T
设计模式基础之类关系
- 博客分类:
- 设计模式
类与类之间的表示关系
依赖关系 :简单的理解,依赖就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖。表现在代码层面,为类B作为参数被类A在某个method方法中使用。在UML类图设计中,依赖关系用由类A指向类B的带箭头虚线表示。
关联关系 :关联体现的是两个类之间语义级别的一种强依赖关系,比如我和我的朋友,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、双向的。表现在代码层面 ...
Reactor设计模式
reactor设计模式,是一种基于事件驱动的设计模式。将一个或多个客户的服务请求分离(demultiplex)和调度(dispatch)给应用程序。
在Reactor模式中,有5个关键的参与者:
1.描述符(handle):由操作系统提供,用于 ...
概述
继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能。现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和 Controller 的映射关系,仅仅使用注解就可以让一个 POJO ...
观察者模式 源-监听器(Source/Listener)模式 事件监听器模式重要的三个概念:事件+事件监听器+事件源
$("#div").addEventListener("click",function(event){}); 事件源:$("#div") 即id = div的html元素 事件:click ...
设计模式之中介者模式
- 博客分类:
- 设计模式
中介者模式
假如没有总经理,下面六个个部门,财务部、市场部、研发部,财务部要发工资,让大家核对公司需要跟市场部和研发部都通气,市场部要接个新项目,需要研发部门处理技术,需要财务部出资金,市场部跟各个部门打交道,虽然只有六个个部门,但是关系非常乱
实际上,公司有总经理,各个部门有什么事情都通报给总结里,总经理再通知各个相关部门这就是一个典型的’中介者模式“,总经理起到一个中介、协调的作用
如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这些对象称为”同事对象“
我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络 ...
设计模式之责任链模式
- 博客分类:
- 设计模式
责任链模式
场景:
公司里面,报销个单据需要经过流程;
申请人填单申请,申请给经理;
小于1000,经理审核;超过1000,交给总经理审批
总经理审批通过;
结构
抽象处理者角色(Handler:Approver):定义一个处理请求的接口,和一个后继连接(可选)
具体处理者角色(ConcreteHandler:President):处理它所负责的请求,可以访问后继者,如果可以处理请求则处理,否则将该请求转给他的后继者。
客户类(Client):向一个链上的具体处理者ConcreteHandler对象提交请求。
结构图
案例:
公司 ...
设计模式之访问者模式Visitor
- 博客分类:
- 设计模式
访问者模式
实现思路:向对象结构类中添加元素,然后定义多种访问者,使用对象结构类去接受访问者即可。
六个角色:
抽象访问者(Visitor):抽象出访问元素的动作,该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过元素角色给具体访问的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它
具体访问者(ConcreteVisitor):实现访问元素的动作,实现每个由访问者Visitor声明的操作
抽象元素(Element):定义一个接受访问的操作(Accept操作),其参数为访问者
具体元素(ConcreteEle ...
设计模式之观察者模式Observer
- 博客分类:
- 设计模式
场景
网站上很多人订阅了 java 主题的新闻,当有这个主题新闻时,就会将这些新闻发给所有订阅的人
把多个订阅者或客户称之为观察者;需要同步给多个订阅者的数据封装到对象中,称之为目标
观察者模式主要用于 1:N ...
原型模式
通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式
就是java中的克隆技术,以某个对象为原型,复制出新的对象,显然,新的对象具备原型对象的特点
优势有:效率高可以直接克隆,避免了重新执行构造过程步骤
克隆类似于new,但是不同于new。nei创建新的对象属性采用的是默认值,克隆出的对象的属性值完全和原型对象相同,并且克隆出的新对象改变不会影响原型对象,然后再修改克隆对象的值。
原型模式实现方式
Cloneable接口和clone方法
Prototype模式中实现起来最困难的地方就是内存复制操作,所幸在Java中提供了clo ...
设计模式之适配器模式Adapter
- 博客分类:
- 设计模式
适配器模式Adapter
什么是适配器模式?
将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作
模式中结构(以电脑和键盘为例)
目标接口Target:客户所期待的接口,目标可以是具体或抽象的类,也可以是接口(USB)
需要适配的类Adaptee:需要适配的类或适配者类 (键盘)
适配器Adapter:通过包装一个需要适配的对象,把原接口转换成目标接口 (需要的产品)
Client:客户电脑
结构图
代码
public interface Target {
...
工厂模式
本质
实例化对象,用工厂方法代替new操作
将选择实现类,创建对象同意管理和控制,从而将调用者跟我们的实现类解耦
实现创建者和调用者的分离三种工厂方式
简单工厂模式:用来生产同一等级结构中的任意产品,对于增加的新产品,需要修改已有代码
工厂方法模式:用来生产同一等级结构中的固定产品,支持增加任意产品
抽象工厂模式:用来生产不同产品族的全部产品,对于增加新的产品,无能为力,支持增加产品族
1.简单工厂模式
公用代码
public interface Car {
void run();
}
public clas ...
设计模式之创建者模式Builder
- 博客分类:
- 设计模式
创建者模式
场景
我们要建造一个复杂的产品,比如:神州飞船、Iphone。这个复杂的产品的创建,有这样一个问题需要处理装配这些字子组件是不是有个步骤问题
实际开发中,我们所需要的对象构建是,也非常复杂,有很多步骤需要处理时
建造模式的本质
分离了对象子组件的单独构造(有Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象,这个模式适用于:某个对象的构建过程复杂的情况下使用
由于实现了构建和装配的解耦,不同的构造器,相同的装配,也可以做出不同的对象;相同的构建起,不同的装配顺序也可以做出不同的对象;也就是实现了构建算法,装配算法的解耦 ...