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

黑马程序员——java设计模式

2015-03-10 18:00 232 查看
-----------android培训java培训、java学习型技术博客、期待与您交流!------------

一、单例设计模式

1、目的:解决一个类在内存只存在一个对象。

2、思想:想要保证对象唯一:

(1)为了避免其他程序过多建立该类对象。先禁止其他程序建立对象

(2)为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象

(3)为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

3、用法:对于对象该怎么描述,还怎么描述

当需要将事物的对象保证在内存中唯一时,就将以上的三步加上即可。

例1: 饿汉式:开发时用:先初始化对象

class Student

{

private int age;

private static Student s= new Student();

private Student(){}

public static Student getStudent()

{

return s;

}

public void setAge(int age)

{

this.age=age;

}

public int getAge()

{

return age;

}

}

在main函数中:

Student s1 = Student.getStudent();

Student s2 = Student.getStudent();

s2.setAge(12);

System.out.println (s1.getAge());

运行结果:12 故只能创建一个对象

例2、懒汉式(面试):方法被调用时,才给对象初始化。也被称为对象的延迟加载

Single类进内存,对象还没存在,只有调用了getInstance方法时,才建立对象。

class Single

{

private int num;

public void setNum(int num)

{

this.num=num;

}

public int getNum()

{

return num;

}

private static Single s = null;

private Single(){}

public static Single getInstance()

{

if (s==null)

s=new Single();

return s;

}

}

二、模板方法设计模式

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

2、例子:获取一段程序运行的时间

abstract class GetTime

{

public final void getTime()

{

long start = System.currentTimeMillis();

runcode();

long end = System.currentTimeMillis();

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

}

public abstract void runcode();

}

class SubTime extends GetTime

{

public void runcode()

{

for(int x=0; x<4000; x++)

{

System.out.print(x);

}

}

}

class TemplateDemo

{

public static void main(String[] args)

{

//GetTime gt = new GetTime();

SubTime gt = new SubTime();

gt.getTime();

}

}

注:父类中不一定由抽象、final等修饰符修饰,应根据具体情况而定

三、装饰设计模式

当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能,那么自定义的该类称为装饰类。

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

class Person

{

public void chifan()

{

System.out.println("吃饭");

}

}

class SuperPerson

{

private Person p ;

SuperPerson(Person p)

{

this.p = p;

}

public void superChifan()

{

System.out.println("开胃酒");

p.chifan();

System.out.println("甜点");

System.out.println("来一根");

}

}

class PersonDemo

{

public static void main(String[] args)

{

Person p = new Person();

//p.chifan();

SuperPerson sp = new SuperPerson(p);

sp.superChifan();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: