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 ();
}
}
版权声明:本文为u013898489原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。