JDK中使用的设计模式

1.抽象工厂模式
实例1:
public static Calendar getInstance()
{
Calendar cal = createCalendar(TimeZone.getDefaultRef(),Locale.getDefault());
cal.sharedZone = true;
return cal;
}
Calendar类将构造方法进行私有话,这样获取对象实例只能通过getInstance()方法了。每次访问该方法返回的是一个新生成的对象。
有意思的是Locale.getDefault()也是一个利用了工厂模式,而且是将单例模式和工厂模式的结构来生成一个单例对象。
实例2:
public static Connection getConnection(String url,
String user, String password) throws SQLException {
java.util.Properties info = new java.util.Properties();

// Gets the classloader of the code that called this method, may
// be null.
ClassLoader callerCL = DriverManager.getCallerClassLoader();

if (user != null) {
info.put("user", user);
}
if (password != null) {
info.put("password", password);
}

return (getConnection(url, info, callerCL));
}
使用JDBC的人都调用过该方法。该方法也是典型工厂模式。
因为该方法是对外的入口,所以将该方法生命为public的。虽然该类拥有很多构造方法,但是最后返回实例的都是依靠getConnection(url, info, callerCL)方法,因为他会将传入的参数都封装到properties对象中。最后再调用该方法。做到了很好的封装与代码复用。而且getConnection(url, info, callerCL)也被设计成是是有的方法,就能保住该方法只给其余构造方法进行调用了。
2.单例模式
实例:
private static Runtime currentRuntime = new Runtime();
public static Runtime getRuntime() {
return currentRuntime;
}
Runtime是一个典型的单例模式,而且是懒汉式的单例模式。
3.模版模式
实例:
OutputStream类的
public abstract void write(int b) throws IOException;
OutputStream的写操作交给了子类去实现,例如FileOutputStream类会调用native的write方法。
public native void write(int b) throws IOException;注意native方法没有实现体。
4.策略模式
TreeMap类的
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}
comparator类是一个接口,里面只包含比较两个对象的方法。
treemap会根据传入的自定义比较器的compare方法判断插入的值应该存放的位置。
即传入的参数对象可能有不同的实现类
5.命令模式
Runnable接口
Runnable是一个典型的命令模式,即每个线程都需要执行不同的操作,因此定义一个命令接口,即Runnable接口。然后使用时需要将Runnable对象传入给Thread类中,Thread就相当于一个调用者(机箱),然后用户对thread对像进行调用就可以执行runnable中定义的操作了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值