-------android培训、java培训、期待与您交流! ----------
在教学视频中,毕老师和张老师提到了3种设计模式,如下:
----------------------------------------------------------------------------------------------------------------------------------------
一. 单例设计模式——解决一个类在类存中只存在一个对象
想要保证对象唯一
1.为了避免其他程序过多建立该类对象,先控制其他程序建立该对象
2.还为了其他程序可以访问该类对象,只好在本类中,自定义一个对象
3为了方便其他程序对自定义对象的访问,可以提供一些对外访问方式
这三部怎么用代码体现
1.将构造函数私有化
2.在本类中创建一个对象
3.提供一个方法可以获取到该方法。
当需要该对象保证在内存中唯一时,就将以上三步即可
饿汉式 Single类一进内存 就创建好了对象
------------------------------------------------------------------------------------------------
class Single{
private int num;
private Single(){} //1.将构造函数私有化
private static Single sl=new Single(); //2.在本类中创建一个对象
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public Single getInstance(){ //3.提供一个方法可以获取到该方法
return sl; //以上三步必须实现
}
}
------------------------------------------------------------------------------------------------
懒汉式
对象是方法被调用时,才初始化对象,也叫对象的延时加载。
class Single{
private int num;
private Single(){} //1.将构造函数私有化
private static Single sl=null; //2.在本类中创建一个对象
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public Single getInstance(){ //3.提供一个方法可以获取到该方法
if(sl==null){ //Single类进内存,对象还没有存在,只有调用getInstance方法时,才建立对象
synchronized (Single.class){ //使用同步代码块确保安全性
if(sl==null){
sl=new Single();
}
}
}
return sl;
}
}
记录原则:定义单例建议使用单例
---------------------------------------------------------------------------------------------------------------------------
二. 模版模式
需求:获取一段程序运行时间
原理:获取程序开始和结束的时间并想减
模板方法设计模式
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分使用不确定的部分,那么这是就将不确定的部分暴露出去由该类的子类去完成。
例子:
------------------------------------------------------------------------------------------------
abstract class GetTime{
public final void getTime(){ //用final修饰 不允许复写
long start =System.currentTimeMillis();
runcode(); //不确定部分
long end=System.currentTimeMillis();
System.out.println("毫秒"+(end-start));
}
public abstract void runcode(); //将不确定部分定义成抽象方法 ,让调用者实现,从而增强代码的复用性
}
------------------------------------------------------------------------------------------------
class SubTime extends GetTime{
@Override
public void runcode() { //实现抽象方法
for(int i=0;i<1000;i++){
System.out.println(i);
}
}
}
------------------------------------------------------------------------------------------------
public class TemplateDemo {
public static void main(String[] args) {
new SubTime().getTime();
}
}
好处:1.提高了扩张性 2.提高了复用性
---------------------------------------------------------------------------------------------------------------------------------------
三. 享元模式
把很多很小的具有相同的属性的对象,编成一个对象,把那些不同的属性,变成方法的参数成方法的参数传入。
public class Autobox {
public static void main(String[] args) {
Integer a=111;//自动装箱
Integer b=111;
System.out.println(a==b) ; //true 因为当数值在byte范围内容,就不会创建新对象,而是使用已有对象
Integer c=222;
Integer d=222;
System.out.println(c==d); / /false 指向不同对象
}
}
---------------------------------------------------------------------------------------------------------------------------------------