- 博客(21)
- 收藏
- 关注
原创 多线程问题,你搞得定吗?
问题:数字1、2、3……100作循环,跑起4个线程,每个线程绑定一个集合来抢数字。 若有线程抢够25个数字,则退出争抢,其它线程继续,直到100个数字分完。
2013-12-18 15:44:11
1089
原创 十八、中介者模式
中介者模式 中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。 该模式实现了控制集中化,把交互复杂性变为了中介者的复杂性,这就使得中介者会比任何一个关联对象都复杂。 ————摘自《大话设计模式》 基本结构: ①、抽象中介者,Mediator 群组各成员的业务处理方法 method
2013-10-24 11:26:09
777
原创 十七、责任链模式
责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到一个对象处理它为止。 ——摘自《大话设计模式》 //Ps:责任处理类都有各自的负责区块,以聚合的方式连成整个的责任链条。 基本结构如下: ①、Request 请求 ②、Handler 处理者的超类 Handler 自身的引用,由该
2013-10-18 14:10:08
897
原创 十六、命令模式
命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 ——摘自《大话设计模式》 Ps:“将请求封装为对象”的思想即是该种设计模式的精华。基本结构如下: ①、Receiver,命令的接收者,也是命令的实际执行者 具体方法一 具体方法二 …… ②、Command,命令超类 Receiver 的
2013-10-18 09:40:02
927
原创 十五、桥接模式
桥接模式,重点在于“分组抽象”,将两组抽象以聚合/组合的方式联系在一起。这两组抽象都可以有各自的变化而不会相互干扰。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。————摘自《大话设计模式》 基本结构如下: ①、A组:######################################### 超类 A
2013-10-10 15:24:56
656
原创 十四、单例模式
单例模式——保证一个类仅有一个实例,并提供一个访问它的全局访问点。 Ps:这是我会的第一个设计模式,当时是为应付面试死记硬背的 几种常用的实现方式如下: ①、饿汉式/** * 单例模式:饿汉式实现 */public class Singletion1 { private static Singletion1 instance = new Singletion1()
2013-09-28 14:40:14
639
原创 寻路人
工作一年多了,不太忙,除了赶项目进度的时候,总有些闲暇时光。我承认自己是个懒人,没有足够的韧性利用下班时间研究专业技术。但和大多数北漂人士一样,一样的不甘于平庸。 每天朝九晚五,偶尔加班,懈怠、劳累、各种诱惑混杂着时间消磨曾经的梦想。转眼而立之年,虽然心里还有那么一丝不甘,也要回家解决生计了。我不想这样…… 试着学过些东西:多线程、linux、设计模式等等。忙忙
2013-09-26 15:02:16
1580
1
原创 十三、组合模式
把A和B组合在一起看成一个对象 需求中是体现部分与整体层次的结构时,以及希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了。 ————摘自《大话设计模式》 基本结构如下: ①、抽象接口 抽象方法:添加对象 抽象方法:移除对象 抽象方法方法A(用于子类覆写后,处理具体事务) ②、具体叶节点类,继承自抽象接口(无扩展)
2013-09-26 12:26:24
1008
原创 十二、备忘录模式
菜鸟骑士挑战Boss,无奈实力悬殊至饮恨而终。不过好在单挑Boss前有“存档”,“嘿嘿,Boss,我们再来打过!” 备忘录模式用于记录某对象某一时刻的状态,比如对象在该时刻的某一属性值,便于读取“进度”。 基本结构如下 ①、需要被记录的对象(菜鸟骑士) 一些属性Fields 备忘录的引用 ②、备忘录 属性Memory(用于记忆对象的属性) ③、备忘中心 备
2013-09-25 17:17:16
726
原创 十一、观察者模式(Observable、Observer)
老板出差了,员工1、员工2..均放羊中。他们请求前台的秘书,当老板回来时通知自己,免得被Boss抓个现行。秘书想了想,说————嗯,这是观察者模式。 当一个对象的改变需要同时改变其它对象,而且它不知道具体有多少方法需要改变时,应该考虑使用观察者模式————摘自《大话设计模式》 Ps:本例用Java类库中的Observable和Observer实现 基本结构: ①、抽象通知者,
2013-09-17 10:39:11
1345
原创 十、建造模式
建造者模式用于创建一些复杂对象,这些对象内部构件间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。 ————摘自《大话设计模式》 基本结构如下: ①、产品,想要创建的复杂对象 ②、抽象建造者 各个构件的抽象建造方法 得到产品的抽象方法 ③、指挥者,指挥建造者 封装建造顺序的方法(产品的构建顺序,构件A-->构件B-->构件C) ④、具体建造者,
2013-09-16 15:46:36
687
原创 九、外观模式
Ps:关于这个笔者实在是没办法顾名思义了 现有原有系统A,要求在A的基础上做升级,对A改进并加入新功能。大刀阔斧的直接在A上修改、扩展并不是一个很好的方案,改来改去很容易诱发未知的问题。如果弄一个“媒介”,由“媒介”和A交互,并向外提供相关接口给新的功能模块使用。这样,从分工和逻辑上都有优势。这种处理方式就是外观模式。 外观模式可应用于将不同的两个层次分离,也可用于子系统与原系统的嫁接…
2013-09-12 14:20:18
789
原创 八、模板方法
在模板的基础上,只对某些特定的部分进行变动。 将所有重复的代码都上升到父类上去,而不是让每个子类都重复。 当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法来处理。 ————摘自《大话设计模式》 笔者私下认为该模式较为简单,比较好理解,直接上代码: ①、模板类########################
2013-09-12 11:15:40
697
原创 七、原型模式(深浅克隆)
类似“影之分身术”的东西,以“鸣人”为原型,复制1000份出来,群殴之…… 在初始化信息不发生变化的情况下,克隆是最好的办法。既隐藏了对象创建的细节,又对性能大大的提高——不用重新初始化对象,而是动态地获得对象运行时的状态。——摘自《大话设计模式》 提到原型模式,就不得不提深浅克隆。两者都是完成对原型的复制,而区别在于对其引用对象的复制情况: 浅复制:仅仅复制原型,而对其他对象的引
2013-09-11 13:59:49
882
原创 六、UML初识
Ps:这里把UML的一些基础知识介绍下,很浅显,算是脑补 其实上面这张图已经包含了笔者要说的全部内容,下面只是分别描述下,能领会者可以忽略后续的内容,去吃个火锅唱个歌了①、类“+”表示public,“-”表示private,“#”表示protected ②、接口接口的实现,空心三角+虚线接口还有另外一种表示方法,俗称棒棒糖表示法 ③
2013-09-11 09:57:00
817
原创 五、代理模式
羞涩男孩八戒喜欢上了邻家女孩嫦娥,由于天性腼腆、不善言辞、性格怯懦等等优良品质的干扰,不敢去当面表达爱意,于是请自己最好的朋友三藏代为赠送礼物,以牵线搭桥。————这就是代理模式 代理模式:为其它对象提供一种代理以控制对这个对象的访问。 基本结构如下: ①、公用方法接口(八戒、三藏都有的行为) 方法甲 方法乙 ②、原型,实现“公用方法接口”(八戒) 方法甲的具体实现
2013-09-10 17:17:44
773
原创 四、装饰模式
所谓装饰,就是在原有物件上增加新的“零件”,使其拥有新的功能。打个比方,就像一个原本裸装的初级剑客,装备了宝剑、坐骑、铠甲等装备之后,战斗力暴增,完成从原来的5剑砍死一头家养猪到一剑秒杀巨龙的华丽转身。 装饰模式是为已有功能动态的添加更多功能的一种方式。它把每个要装饰的功能放到单独的类中,并让这个类包装它所要装饰的对象,当系统需要执行特殊行为时,客户就可有选择的、按顺序的使用装饰功能包装对象了
2013-09-10 14:42:35
674
原创 三、一些软件设计的原则、理念
①、软件设计的真正要做的许多内容,就是发现职责,并把那些职责相互分离(单一职责) ②、软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。(开闭原则) ③、针对接口编程,不要对实现编程。也就是针对抽象编程而不要针对细节编程(依赖倒转) ④、在软件里面,把父类都替换成它的子类,程序行为没有变化(里氏代换) Ps:继策略模式之后,书中用了大量的篇幅诠释了这些概念性
2013-09-10 09:46:32
1282
原创 二、策略模式(策略工厂)
顾名思义,策略模式就是在不同的条件下采取不同的策略,及不同的算法或业务规则。 策略模式是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则。只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑用策略模式处理这种变化的可能性。 --《大话设计模式》 基本结构如下: ①、超类,或许可设计成抽象的abstract 一些公用的属性(被子类调用)
2013-09-09 16:04:58
1160
原创 一、简单工厂
工厂适用于生产,生产出不同的对象,这些对象都有着相同的特性,又有着各自独特的地方。 基本结构如下: ①、超类,或许可设计成抽象的abstract 一些公用的属性(被子类调用) 一些公用的方法(被子类覆写) ②、子类,个数较多,继承超类 得到超类公用方法,覆写 ③、工厂 工厂用于构建,以多态的方式,通过条件判
2013-09-09 15:38:03
565
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人