您的位置:首页 > 职场人生

黑马程序员_设计模式学习(学习积累中,未完待续)

2014-03-15 16:04 399 查看
------- android培训java培训、期待与您交流! ----------

1、装饰设计模式:

当想要对已有对象进行功能增强时,

可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。

那么自定义的该类称为装饰类。

装饰类和被装饰类通常在一个体系中。

装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能。

举例:FileReader与BufferedReader(都继承于Reader)

BufferedReader相对于FileReader,提供了readLine()的功能。

BufferedReader br = new BufferedReader(new FileReader("D:\\1.txt"));
br.readLine();


2、单例模式

在整改程序中,只需要公用一个对象实例。

1)恶汉式

特点:

多线程安全

结构简单

类初始化即加载

eg:

public class Single {
//类加载时,就新建实例,保存在静态引用下
private static Single single = new Single();

//构造器私有化
private Single(){
}

//获取实例(静态方法)
public static Single getInstance() {
return single;
}
}
2)懒汉式

特点:

只有在第一次调用时,才会新建实例。

为保证线程安全,需要采用双重if判断 + 同步。

eg:

public class Single {
//类加载时,引用置为null
private static Single single = null;

//构造器私有化
private Single(){
}

//获取实例
public static Single getInstance() {
//双重if判断 + 同步
if(null==single) {
//这边同步锁为类字节码
synchronized (Single.class) {
if(null==single) {
single = new Single();
}
}
}
return single;
}
}


3、模板模式

希望程序调用的某一部分不确定的代码,交给子类通过继承定义。

比较常见的应该就是多线程的Thread类了,我们最终要运行线程,调用的是start()方法,但线程中的行为,需要在run()方法中提前定义好。

自定义实现模板模式,eg:

abstract class PersonTemp {
/**
* 打印名字
*/
void print() {
System.out.println("我的身份是:" + insert() + "!");
}

/**
* 要求子类去实现的抽象方法返回身份
* @return
*/
abstract protected String insert();
}

class Student extends PersonTemp {
/**
* 实现父类的抽象方法
* @return
*/
@Override
protected String insert() {
return "学生";
}
}

/**
* 验证
* @author CBY
*
*/
public class MainTest {
public static void main(String[] args) {
//这边调用,能直接打印身份。
new Student().print();
//匿名内部类的实现方式
new PersonTemp(){
@Override
protected String insert() {
return "程序员";
}
}.print();
}
}


------- android培训java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐