设计模式
解决现实中的问题出来的,设计思想--基石OOP
要求:1000次的循环需要多长时间
循环开始的时候,记录时间,结束后记录时间
java.lang.System类,静态方法 long currentTimeMillis()作用,返回自1970年1月1日午夜零时,到程序运行的那个时间,所经过的毫秒值 1秒=1000毫秒
刚才的问题,使用main方法写,刚才的程序封装成对象。封装成对象后,发现程序一部分确定,一部分不确定,将不确定的地方,写成一个方法,调用就可以了。将不确定的地方,不写,暴露出去,等待别人来实现,子类继承和覆盖
提供一个方法模版,子类继承后,重写方法,实现自己的功能,模板方法设计模式
装饰设计模式
增强原有对象的功能。
地面,作用承重,加地板,干净,休息
Person,吃的功能,看成地面,BufferPerson,增强原有人的吃饭功能,铺地板
private Reader r;
BufferedReader(new FileReader){
this.r = new FileReader();
}
String readLine(){ r.read(); }
public void close(){ r.close();}
.继承重写方法,装饰模式的区别,谁更有优势
继承,面向对象三大特征之一,装饰模式,解决实际的问题,出现设计思想
根本的区别继承体系的不同
继承覆盖方法来解决
Reader
读取文本类 ReaderText
|-- BufferReaderText 提升原有读取文本类的功能
读取照片类 ReaderPicture
|--BufferReadPicture 提升原有读取照片类的功能
读取音乐类 ReaderMusic
|--BufferReaderMusic 提升原有读取音乐类的功能
读取游戏类 ReaderGame
|--BufferReaderGame 提升原有读取游戏类的功能
以上的解决方式,是继承和覆盖,由于单继承,导致了继承体系过于庞大和臃肿,因此,学习起来很困难,开发者使用起来也很麻烦
采用装饰模式解决
Reader
读取文本类 ReaderText
读取照片类 ReaderPicture
读取音乐类 ReaderMusic
读取游戏类 ReaderGame
提升原有流对象功能,提升谁不清楚,但是我知道提示的一定是Reader的子类
缓冲区对象 BufferedReader (Reader r) extends Reader
装饰的设计模式,继承体系,简单,明了,学习很简单,开发者用着也顺手
单例设计模式Single
设计思想,保证对象的唯一性 class A{} new A() new A()
建立对象,调用类的构造方法,类私有了构造方法
实现步骤:
私有构造方法
成员位置创建自己的本类对象
提供公共方法,返回创建的对象
多线程并发访问懒汉式的方法getInstance()获取对象,输出对象,哈希值不是唯一
采用判断if两层,加上同步,保证了程序的安全性和执行效率,这个案例必须会写!
*****由于将构造方法私有化了,该类不能被继承*********
|
|