黑马程序员——设计模式

---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------

设计模式

      java中有23种设计模式:

         我们现在介绍单例设计和模块设计方式


 单例设计模式:(解决一个类在对象中,只存在一个对象)
 
 
         * 想要保证对象的唯一
          * 1,为了避免其它程序过多的建立该类对象,先禁止其它程序建立该类对象。
          * 2,还为了让其它程序可以访问到该类对象,只好在本类中,自定义一个对象。
          * 3,为了方便其它程序对自定义对象的访问,可以对外提供一些访问方式。


            模块设计

               

              * 什么是模板方法呢?

              * 在定义功能时,功能的一部分是确定的,但是有一部分是不确定的。

              * 而确定部分正在使用不确定部分,那么这时就将不确定部分暴露出去。

              * 由该类的子类去完成

     

为什么有饿汉式还会有懒汉式?

原因就是对了面试,因为面试都是考懒汉式

 

   懒汉式单例效率低,解决效率低的问题,使用双重if进行判断。

   懒汉式单例存在多线程安全问题,解决安全问题的方法是加同步锁

 

总结:

饿汉式:一上来就对对象初始化。

懒汉式:对象调用方法时,才初始化,也叫做对象的延时加载。


饿汉式


图示




/*
 * 设计模式:
 * java中有23种设计模式:
 * 我们介绍其中一种设计模式:
 * 单例设计模式:(解决一个类在对象中,只存在一个对象)
 * 
 * 想要保证对象的唯一
 * 1,为了避免其它程序过多的建立该类对象,先禁止其它程序建立该类对象。
 * 2,还为了让其它程序可以访问到该类对象,只好在本类中,自定义一个对象。
 * 3,为了方便其它程序对自定义对象的访问,可以对外提供一些访问方式。
 * 
 * 这三步使用代码体现方式?
 * 1,将构造函数私有化。
 * 2,在类中创建一个本类对象。
 * 3,提供一个方法可以获取该对象。
 * 
 * 什么时候使用?
 * 对于事物该怎么描述,还怎么描述
 * 当需要将该事物的对象在内存中唯一时,就将以上三步加上即可。
 * 例如下面代码:Studetn类(对一个特殊学生定义:唯一的学生)
 */

class Single
{
	private int num;
	public void setNum(int num)
	{
		this.num = num;
	}
	public int getNum()
	{
		return num;
	}
	private Single(){}          //第一步:将初始化构造函数私有化。
	
	//由于不能让外部访问此方法,所以前面要加private 
	private static Single s = new Single();    //第二步:在本类中创建一个本类对象。
	public static Single getInstance() //第三步:提供一个方法,获取该对象。(返回值是:调用哪个方法返回哪个)
	{
		return s;   //因为静态成员只能访问静态成员变量,所以上面的s 也要加上static
	}
}
public class _08设计模式 {
	
	public static void main(String[] args)
	{
		//如何调用上面的对象?因为不能创建对象new....所以只能通过类名.方法名  所以方法加static
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();
		s1.setNum(33);//赋值
		System.out.println(s2.getNum());
		
		Student d1 = Student.StudetnInstance();
		Student d2 = Student.StudetnInstance();
		d1.setAge(22);//给d1赋值后,再打印d2的年龄;也是22,
		System.out.println(d2.getAge());//结果是:22
	}

}
class Student
{
	private int age;
	public void setAge(int age)
	{
		this.age=age;
	}
	public int getAge()
	{
		return age;
	}
	private Student(){}
	private static Student s = new Student();
	public static Student StudetnInstance()
	{
		return s;
	}
}


懒汉式

/*
 * 第一种方式称为:饿汉式
 * 这是先初始化对象
 * Single类一进入内存,就已经创建好了对象
 */
/*
class Single
{
	private String name;
	private Single(){};
	private static Single s = new Single();
	public static Single SingleInstance()
	{
		return s;
	}
}
*/
/*
 * 第二种方式  称为:懒汉式
 * 对象是被方法调用时,才初始化,也叫做对象的延时加载。
 * Single类进内存,对象还没有存在,只有调用了“SingleInstance方法时,才建立对象”
 */
class Singlee
{
	private static Singlee s = null;
	private Singlee(){}
	public static Singlee SingleInstance()
	{
		if(s==null)//双重if判断
		{
			synchronized(Singlee.class)//上锁
			{
				if(s==null)  //-->A 线程执行的时候,还没有执行完时,有可能会被其它线程抢去,所以需要再次判断
				{
					s = new Singlee();
				}
			}
		}
		return s;
	}
}
public class _09设计模式_单例_懒汉式 {
	
	public static void main(String[] args)
	{
		Singlee s = Singlee.SingleInstance();
		
	}

}


模块设计

/*
 * 需求:获取一段程序运行的时间
 * 原理:获取程序开始和结束的时间并相减即可。
 * 
 * 获取时间的Java提供代码块是:System.currentTimeMillis();
 * 
 * 当代码完成优化后,就可以解决这类问题。
 * 
 * 这种方式,模板方法设计模式
 * ------------------------------
 * 什么是模板方法呢?
 * 在定义功能时,功能的一部分是确定的,但是有一部分是不确定的。
 * 而确定部分正在使用不确定部分,那么这时就将不确定部分暴露出去。
 * 由该类的子类去完成
 */
abstract class getTime
{
	public final void getTime() //不允许覆写
	{
		long start = System.currentTimeMillis();//变量要用:long
		TimeRun();//调用方法
		long end = System.currentTimeMillis();
		System.out.println("运行时间:"+(end-start)+"毫秒");
	}
	public abstract void TimeRun();//此为抽象方法:因为它具有不确定性   abstract
}
class SubTime extends getTime
{
	public void TimeRun()
	{
		for(int x=0;x<40000;x++)
		{
			System.out.println(x);
		}
	}
}
public class _07设计模式_模块设计 {
	
	public static void main(String[]args)
	{
		SubTime st = new SubTime();
		st.getTime();
	}
}


---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员 设计模式c 是指黑马程序员通过C语言实现设计模式的一门课程。设计模式是面向对象设计中经过实践和总结后的一种解决问题的方案。它是一种具体的设计思路,是编写高质量、易于理解、可维护和可扩展的代码的指导原则。在软件开发中,我们经常会遇到各种各样的问题,设计模式可以帮助我们更加灵活高效地解决这些问题。 黑马程序员设计模式C课程从理论讲解到实践操作,通过C语言来实现各种设计模式,帮助学员理解设计模式的原理和应用场景。通过学习该课程,学员可以提升自己的设计能力和编程水平,使得自己编写的代码更加优雅和可复用。 该课程主要包括以下几个部分:首先是介绍设计模式的基本概念和分类;然后是详细讲解每一种设计模式的原理、结构和应用场景;接着是通过具体的案例来演示如何在C语言中实现每一种设计模式;最后是实际项目实战,让学员能够将所学的设计模式应用到实际的软件开发中。 通过学习黑马程序员设计模式C课程,可以帮助开发人员更好地理解和应用设计模式,提高软件开发的质量和效率。无论是对于初学者还是有一定经验的开发人员来说,都可以从中获得实际的收益。设计模式是编写高质量代码的基石,掌握设计模式可以让我们在编程过程中更加得心应手,实现代码的可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值