黑马程序员_设计模式学习(学习积累中,未完待续)
2014-03-15 16:04
399 查看
------- android培训、java培训、期待与您交流! ----------
1、装饰设计模式:
当想要对已有对象进行功能增强时,
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。
装饰类和被装饰类通常在一个体系中。
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能。
举例:FileReader与BufferedReader(都继承于Reader)
BufferedReader相对于FileReader,提供了readLine()的功能。
2、单例模式
在整改程序中,只需要公用一个对象实例。
1)恶汉式
特点:
多线程安全
结构简单
类初始化即加载
eg:
特点:
只有在第一次调用时,才会新建实例。
为保证线程安全,需要采用双重if判断 + 同步。
eg:
3、模板模式
希望程序调用的某一部分不确定的代码,交给子类通过继承定义。
比较常见的应该就是多线程的Thread类了,我们最终要运行线程,调用的是start()方法,但线程中的行为,需要在run()方法中提前定义好。
自定义实现模板模式,eg:
------- 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培训、期待与您交流! ----------
相关文章推荐
- 黑马程序员——OC基础学习(五)---分类(Category),代码块Block和protocol代理设计模式
- 【黑马程序员】Java基础学习博客——两种设计模式
- 黑马程序员————IOS学习笔记 第12篇 关于单例设计模式的认识
- Java开发中的23+2种设计模式学习个人笔记(未完待续)
- 黑马程序员——黑马学习日志之六 静态,单例设计模式,继承,多态
- 黑马程序员------java学习笔记之单例设计模式
- 黑马程序员-学习日记(单例设计模式的两种类型)
- 黑马程序员——Java学习之“浮”谈设计模式
- 黑马程序员 JAVA学习笔记——java基础 单例设计模式
- 黑马程序员_java基础学习笔记之单例设计模式
- 黑马程序员--Java设计模式学习(一)
- 黑马程序员_基础_IO流学习笔记_文本文件读取及复制、字符流的缓冲区和装饰设计模式
- 黑马程序员_学习笔记:3) 面向对象1:概述、封装、this、static、单例设计模式
- 黑马程序员_学习记录06:静态以及单例设计模式
- 黑马程序员——学习Java基础之 io LineNumberReader 之装饰设计模式
- 黑马程序员学习笔记——单例设计模式
- 黑马程序员_学习笔记:4) 面向对象2:继承、this、super、finally、Abstract、模板设计模式、接口
- 黑马程序员-Java学习笔记之设计模式(单例设计模式,装饰设计模式,模板设计模式)
- 黑马程序员java学习第六天,static静态的使用及单例设计模式
- 黑马程序员——OC学习——Protocol和代理设计模式