Java之常用设计模式详解

本文详细介绍了Java中的六种设计模式:单例模式(饿汉式和懒汉式)、简单工厂模式、代理模式(静态代理和动态代理)、观察者模式、适配器模式和装饰者模式。通过实例代码展示了这些模式的实现和应用场景,帮助读者理解设计模式的重要性及其在实际项目中的应用。
摘要由CSDN通过智能技术生成


前言

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因

1.单例模式

(1)如果一个类始终只能创建一个实例,则这个类被称为单例类,这种模式就被称为单例模式。一般建议单例模式的方法命名为:getInstance(),这个方法的返回类型肯定是单例类的类型了。getInstance方法可以有参数,这些参数可能是创建类实例所需要的参数,当然,大多数情况下是不需要的。

(2) 所谓单例设计模式简单说就是无论程序如何运行,采用单例设计模式的类(Singleton类)永远只会有一个实例化对象产生。具体实现步骤如下:

  (1) 将采用单例设计模式的类的构造方法私有化(采用private修饰)。

  (2) 在其内部产生该类的实例化对象,并将其封装成private static类型。

  (3) 定义一个静态方法返回该类的实例。

     示例代码如下:
    class Singleton {
      
        private static Singleton instance = new Singleton();// 在内部产生本类的实例化对象  
      
        public static Singleton getInstance() {
    // 通过静态方法返回instance对象  
            return instance;   
        }   
      
        private Singleton() {
    // 将构造方法封装为私有化  
        }   
      
        public void print() {
      
            System.out.println("Hello World!!!");   
        }   
    }   
      
    public class SingletonDemo {
      
        public static void main(String args[]) {
      
            Singleton s1 = null; // 声明对象  
            Singleton s2 = null; // 声明对象  
            Singleton s3 = null; // 声明对象  
            s1 = Singleton.getInstance(); // 取得实例化对象  
            s2 = Singleton.getInstance(); // 取得实例化对象  
            s3 = Singleton.getInstance(); // 取得实例化对象  
            s1.print(); // 调用方法   
            s2.print(); // 调用方法   
            s3.print(); // 调用方法   
        }   
    }  

单例模式的实现方式

两种实现方式:

1、饿汉式:在类被加载后,对象被创建,到程序结束后被释放

2、懒汉式,在第一次调用getInstance方法时,对象被创建,到程序结束后被释放

在项目中为什么要使用单例,单例有什么好处?
1、在设计一些工具类的时候(通常工具类、只有功能方法,没有属性)

2、工具类可能被频繁调用(目的是为了节省重复创建对象所带来的内存消耗,从而来提高效率)
代码如下:

/**
 * 
 * 单例模式的实现:饿汉式,线程安全 但效率比较低
 */
public class SingletonTest {
   
 
	private SingletonTest() {
   
	}
 
	private static final SingletonTest instance = new SingletonTest();
 
	public static SingletonTest getInstancei() {
   
		return instance;
	}
 
}
 
/**
 * 单例模式的实现:饱汉式,非线程安全 
 * 
 */
public class SingletonTest {
   
	private SingletonTest() {
   
	}
 
	private static SingletonTest instance;
 
	public static SingletonTest getInstance() {
   
		if (instance == null)
			instance = new SingletonTest();
		return instance;
	}
}
 
/**
 * 线程安全,但是效率非常低
 * @author vanceinfo
 *
 */
public class SingletonTest {
   
	private SingletonTest() {
   
	}
 
	private static SingletonTest instance;
 
	public static synchronized SingletonTest getInstance() {
   
		if (instance == null)
			instance = new SingletonTest();
		return instance;
	}
}
 
    /**  
     * 线程安全  并且效率高  
     *  
     */  
    public class SingletonTest {
      
        private static SingletonTest instance;   
      
        private SingletonTest() {
      
        }   
      
        public static SingletonTest getIstance() {
      
            if (instance == null) {
      
                synchronized (SingletonTest.class) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值