------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
package o_oriented;
/*
设计模式:
解决某一问题最行之有效的方法。java中有23种设计模式。
单例设计模式:
解决一个类在内存只存在一个对象。
思路:
1.为了避免其他程序过多的建立该类对象,先禁止其他程序访问该类对象。
2.但又为了其他程序访问到该类对象,则在该类中自定义一个对象。
3.对外提供一个方法,可以访问该类对象。
步骤:
1.构造函数私有化。
2.在类中创建一个本类对象。
3.创建一个公有方法,获取该类对象。
注意:对于事物,该怎么描述怎么描述,该创建变量则创建变量,该创建功能则创建功能。
当需要保证该类对象在内存中具有唯一性时,则可以使用单例设计模式。
例如:配置文件。
修改配置文件中的参数,修改多次也好,也是修改一个对象的值。
*/
public class SingleDemo {
public static void main(String[] args)
{
Single ss = Single. getInstance();
ss. setCountry( "China");
Single ss1 = Single. getInstance();
System. out.println (ss1 .getCountry ());
}
}
class Single
{
private String country;
public String getCountry()
{
return country ;
}
public void setCountry (String country )
{
this.country = country ;
}
private Single(){
}
private static Single s = new Single();
public static Single getInstance()
{
return s ;
}
}
====================================================================================================
package o_oriented;
/*
饿汉式:
class Single {
private Single(){}
private static Single s = new Single();
public static Single getInstance() {
return s;
}
这个先初始化对象。
Single类一进内存,就已经创建好了对象。
注意:在开发时,用饿汉式。懒汉式在面试当中比较常见,通过结合多线程来解释。
*/
public class SingleDemo2 {
public static void main(String[] args)
{
}
}
/*
懒汉式:
对象是方法被调用时,才初始化,也叫做对象的延时加载。
Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。双重判断机制
*/
class Single {
private Single(){}
private static Single s = null;
public static Single getInstance()
{
if( s == null)
{
synchronized(Single .class)
{
if( s == null)
s = new Single();
}
}
return s ;
}
}
====================================================================================================
模板方法设计模式:
package o_oriented2;
/*
模板方法设计模式:
需求:获取一段程序运行的时间。
原理:获取程序开始和结束的时间并相减即可。
获取时间方法:System.currentTimeMillis();
当代码完成优化后,就可以解决这类问题了。
这种方式,称为模板方法设计模式
什么是模板方法?
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,
那么这时就将不确定的部分暴漏出去,由该类的子类去完成。
保证获取功能唯一,不被复写,用final
*/
public class TemplateDemo
{
public static void main(String[] args)
{
SubTime sb = new SubTime();
sb. getTime();
}
}
abstract class GetTime
{
public final void getTime()
{
long start = System .currentTimeMillis();
runCode();
long end = System .currentTimeMillis();
System. out.println ("time:
" +(end - start ));
}
public abstract void runCode();
}
class SubTime extends GetTime
{
public void runCode ()
{
for( int x = 0; x< 4000; x++)
{
System. out.println (x );
}
}
}
====================================================================================================
package cn.itcast.IO2;
/*
装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。
那么自定义的该类称为装饰类。
装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。
*/
//普通类
class Person
{
public void eat ()
{
System. out.println ("吃饭" );
}
}
//装饰类,增强Person类的功能。
class SuperPerson
{
private Person p;
SuperPerson( Person p)
{
this.p = p;
}
public void superEat ()
{
System. out.println ("开胃酒" );
p. eat();
System. out.println ("甜点/餐后水果" );
}
}
public class PersonDemo {
public static void main(String[] args)
{
Person p = new Person();
SuperPerson sp = new SuperPerson( p);
sp. superEat();
}
}
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------