java 博客 制作教程_java设计模式

# 设计模式概述

## 概念

解决某一问题最行之有效的方法,共有23种设计模式

# 单例设计模式

## 单例作用

使一个类在内存中只存在一个对象

## 单例——饿汉式

```java

//特点是先初始化对象。如:Single类一进内存,就已经创建好了对象。在实际开发中,出于安全考虑,建议使用饿汉式

class Single

{

private Single(){};

private static Single s = new Single();

public static Single getInstance()

{

return s;

}

}

```

## 单例——懒汉式

```java

// 特点对象是方法被调用时,才初始化

// 这也叫对象的延时加载

// 如:在以下完整代码中,Single类进内存,对象还没有存在,只有调用了getInstance()方法时,才创建对象

class Single

{

private static Single s = null;

private Single(){}

public static Single getInstance()

{

if(s == null)

s = new Single();

return s;

}

}

```

## 单例——懒汉式改进

```java

//懒汉式在多线程操作时会出现安全隐患,以下写出解决安全隐患的代码,但代码繁琐,建议使用饿汉式

class Single

{

private static Single s = null;

private Single(){}

public static Single getInstance()

{

//判断是否为空,以确定执行同步代码块,提高效率

if(s==null) {

//将判断和赋值动作封装在同步代码块中,保证多线程安全

synchronized(Single.class)

{

//判断是否为空,防止某线程在刚刚判断完上一个if语句而失去了执行权,导致的线程安全问题

if(s==null)

s = new Single();

}

}

return s;

}

}

```

# 模版方法设计模式

## 模板方法简述

在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去。由该类的子类去完成

## 模板方法代码

```java

//该设计模式在使用时,建立子类对象,调用子类继承自父类的getTime()

abstract class GetTime

{

//计算某段代码运行完成所需时间

//该方法不能被读写所以定义为final

public final void getTime()

{

long start = System.currentTimeMillis();

run();//调用需要计算时间的运行代码

long end = System.currentTimeMillis();

System.out.println("用时:"+(end-start)+"毫秒");

}

//要运行的代码不确定,定义为抽象由子类去实现

//该方法不一定抽象,也可能有默认方式,如果觉得默认的不行可以复写

//设计模式是一种思想,主要理解思想

public abstract void run();

}

class SunGetTime extends GetTime

{

//复写父类的run方法

public void run()

{

for(int i = 0; i<1000; i++)

{

System.out.print(i);

}

}

}

```

-separator-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值