黑马程序员——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();
}
}
一、单例设计模式
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();
}
}
相关文章推荐
- 黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)
- 黑马程序员---单例设计模式【java】
- 黑马程序员------java学习笔记之单例设计模式
- 黑马程序员-Java_模版方法设计模式(Template Pattern)
- 黑马程序员_java基础复习之十常用设计模式总结
- 黑马程序员_JAVA设计模式之单例模式
- 黑马程序员-JAVA基础-IO流中的装饰设计模式
- 黑马程序员_毕向东JAVA基础_设计模式&异常处理机制
- 黑马程序员JAVA基础-单例设计模式
- 黑马程序员-Java _ 简单工厂设计模式(Plant Pattern)
- 黑马程序员 ---Java加强_基本数据的自动拆装箱及享元设计模式,javabean
- 黑马程序员---JAVA基础JAVA23种设计模式之---单例设计模式
- 黑马程序员 Java设计模式总结
- 黑马程序员:Java基础总结----单例设计模式
- 黑马程序员 java学习笔记3-IO流之字节流与装饰设计模式
- 黑马程序员_java 单例设计模式
- 黑马程序员java学习第六天,static静态的使用及单例设计模式
- 黑马程序员_java的IO流(对第十九课字符缓冲区及装饰设计模式的总结)
- 黑马程序员:Java基础总结----装饰设计模式
- 黑马程序员:Java基础总结----模版方法设计模式