- 浏览: 191900 次
- 性别:
- 来自: 杭州
最新评论
-
zyyedna:
你好,请问我用Captcha captcha = config ...
“ClientAbortException: java.net.SocketException:”异常的问题 -
15201493793:
大神arraylist完了,linkedList呢,set,m ...
Java源码解读——ArrayList(二) -
unbachone:
ensureCapacityInternal不是“确保内部容量 ...
Java源码解读——ArrayList(二) -
jssyjam:
/** * The maximum size of a ...
Java源码解读——ArrayList(二) -
jiangyeqt:
transient修饰符让elementData无法自动序列化 ...
Java源码解读——ArrayList(二)
文章列表
顾名思义就是原型模式和工厂模式的结合。在GOF的书里面,抽象工厂那节中对这个有描述,不过内容很少,所以看的时候也没注意到。
说个实际的问题:系统需要向用户发送短信,但是根据场景的不同,发送的短信格式也不同,比如重置密码和发送临时验证码的短信格式就有区别,而之前的开发人员使用了策略模式,每个内容都有一个类,现在也不方便去改动这些。但是随需求的增加,发送的场景在不断增加,策略+工厂方法模式的情况下需要去增加更多的if-else,导致扩展困难,也使得调用时候不直观。
本人自认为自己小脑瓜没有能力想出好办法,只好去翻下书籍,无意中看到了抽象工厂内介绍原型工厂的内容,想 ...
意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
别名
Handle/Body
结构
参与者
• Abstraction
— 定义抽象类的接口。
— 维护一个指向I m p l e m e n t o r类型对象的指针。
• RefinedAbstraction
— 扩充 ...
如果你知道电源适配器的作用,就应该很容易理解这个模式。
意图:
将一个类的接口转换成客户希望的另外一个接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
别名:
包装器 Wrapper
结构:
类适配器
public interface Target {
public void request();
}
public class Adaptee {
public void specificRequest() {
//do something
}
}
//类适配器
publ ...
创建型模式:
用于创建对象的模式。
用一个系统创建的那些对象的类对系统进行参数化有两种常用方法:
一、生成创建对象的类的子类;这对应于使用 Factory Method模式。这种方法的主要缺点是,仅为了改变产品类,就可能需要创建一个新的子类。这样的改变可能是级联的。
二、对系统进行参数化的方法更多的依赖于对象复合:定义一个对象负责明确产品对象的类,并将它作为该系统的参数。这是 Abstract Factory、Builder和Prototype模式的关键特征。所有这三个模式都涉及到创建一个新的负责创建产品对象的“工厂对象”。Abstract Factory由这个工厂对象产 ...
意图:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
结构图:
代码示例:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
public void test() {
System.out.println("Si ...
很少见到,我都没遇到过,或是遇到过也没注意。
意图:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
结构:
Prototype
——声明一个克隆自身的接口
ConcretePrototype
——实现 ...
意图:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的实例化延迟到其子类。
别名:
虚构造器(Virtual Constructor)
结构:
•Product
— 定义工厂方法所创建的对象的接口。
...
用来构建复杂的实例,java的StringBuilder就是一个Builder模式的例子。
意图:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
结构:
代码示例:
Builder类
public abstract class Builder {
protected String product;
public Builder() {
product = new String("");
}
public void buildPart(String part) {
/ ...
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
。
别名:
Kit
结构:
代码示例:
AbstractFactory类
public abstract class AbstractFactory {
public abstract AbstractProductA createProductA();
public abstract AbstractProductB createProductB();
}
ConcreteFactory类
public class ConcreteFacto ...
Mybatis返回特殊Map
- 博客分类:
- Java
想返回个特殊实体,一个Map,key是一个表的一个字段的值,value是另一个表的所有记录。参考了下网上的“攻略”,不过和攻略里面讲的有点不同,那里面key的值value的实体实在同一个表内,如果不同表,会报缺少set方法的异常。解决方法很简单,就是在实体里面加个字段对应的属性。但是并不愿意为了一个查询语句就要去改变实体。
无聊看了下session的select,提供了通过ResultHandler来处理返回的结果集。所以尝试着解决这个问题。
mapper.xml里面的配置如下:
<resultMap type="HashMap" id="test ...
“色调”的参数设置为85,把“饱和度”参数设置为123,把“亮度”参.数设置为205 红199 绿237 蓝204
大家來學VIM(一個歷久彌新的編輯器)[十]
- 博客分类:
- 开发工具
規則表示式的運用
在本系列文章一開始就說明了學 vi(m) 可以順便學規則表示式(regular expression,以下簡稱 regexp),那為什麼到現在才來講呢?因為 regexp 說簡單也算不很難,但您要深入去使用的話,有時會馬上看不出一個複雜的 regexp 在說些什麼的,就曾有人形容 regexp 為「有字天書」!而且在 vi(m) 整體都還沒一個概念就加入 regexp 的話,那後面的單元恐怕就沒人看了!而 regexp 各家有各家的 extensions,這也是大家視為畏途的原因之一,不過總是大同小異,只需注意一下就可以了。目前先不必管別家怎麼說,就讓 vim ...
大家來學VIM(一個歷久彌新的編輯器)[九]
- 博客分类:
- 开发工具
set 功能設定
本單元可說是 vi(m) 的微調功能,可依您個人的喜好做有限度的調整。由於 vim 做了相當的擴充,文內主要是述敘 vim 的設定,但 elvis 沒有的也會標明。但並不打算一網打盡,只說明重要、常用的部份,其它的可 ...
大家來學VIM(一個歷久彌新的編輯器)[八]
- 博客分类:
- 开发工具
shell 命令及求助系統
shell命令
:!外部指令 執行外部指令。當然您的指令要在 PATH 內。
:!! 執行前一次執行之外部指令。
在這裡的 ! 可不是強迫中止喔!
vim 中有一個很特殊的指令 @:,是重複前一次的冒號命令。
:sh(ell) 執行 shell。使用 exit 回來。
這在 vim GUI 會在原視窗內顯示執行結果,在 elvis GUI 則會另開一 xterm 視窗。console 或 xterm 下的 vim 當然就是跳出 vim 進入 shell 中。
至於是用哪一種 ...
大家來學VIM(一個歷久彌新的編輯器)[七]
- 博客分类:
- 开发工具
各種標示方法及視窗操作
這個單元多了一種模式,那便是 visual mode(以下簡稱 v-mode)v-mode 下的反白區(反黑區?^_^)在本文就統一稱為標示區,不知各位是否有更好的中文名稱?ㄟㄟㄟ,視窗操作和標示有什麼關係?為什麼擺在這裡說明?ㄚ,是因為這兩個單元內容都不多,沒地方擺,所以就將就湊在一起的啦!亂點鴛鴦譜就請各位見諒。
標示指令
v 小寫 v,這是屬於字元標示(character visual),按下 v 後
您就可以移動游標,游標走過的地方就會標示起來。再按一次
v 就會結束 v-mode。您用 mouse 拉出的 ...