(Java中几种常用的设计模式)单例模式、工厂模式、代理模式、策略模式、观察者模式、适配器模式、责任链模式和装饰者模式

本文详细介绍了Java中的八种常用设计模式:单例模式(四种实现方式)、工厂模式(普通、多个工厂方法、静态工厂方法、抽象工厂模式)、代理模式(静态代理和动态代理)、策略模式、观察者模式与发布/订阅模式的区别、适配器模式(类、对象、接口适配器)以及责任链模式和装饰者模式的应用场景和实现方法。这些设计模式是提升代码质量和可维护性的关键工具。
摘要由CSDN通过智能技术生成

一、单列模式:一个类只允许产生一个实例化对象;
Singleton是一个创建型模式,指某个类采用Singleton模式后,则这个类在创建之后,只会可能产生一个实例供外部访问,并且提供一个全局的访问点。

实现方式有懒汉式和饿汉式共四种:
1、饿汉式,线程安全 但效率比较低 :

public class SingletonTest { 
    private SingletonTest() {  
    } 
    private static final SingletonTest instance = new SingletonTest(); 
    public static SingletonTest getInstancei() {  
        return instance;  
    } 
} 

2、懒汉式,非线程安全:

public class SingletonTest {  
    private SingletonTest() {  //私有构造方法
    }  
    private static SingletonTest instance;  //声明变量
    public static SingletonTest getInstance() {  //提供对外方法
        if (instance == null)  
            instance = new SingletonTest();  
        return instance;  
    }  
} 

3、懒汉式,线程安全,但是效率非常低:

public class SingletonTest {  
    private SingletonTest() {  //私有构造方法
    }  
    private static SingletonTest instance;  //声明变量
    public static synchronized SingletonTest getInstance() {  //提供对外方法
        if (instance == null)  
            instance = new SingletonTest();  
        return instance;  
    }  
} 

4、懒汉式,线程安全 并且效率高(常用):

public class SingletonTest{
    //声明变量
	public static Singleton instance;
    //私有构造方法
	private SingletonTest(){
	}
    //提供对外方法
	public static SingletonTest getInstance(){ 
		if (instance == null){
			synchronized(SingletonTest.class){
				if (instance == null){
					instance = new SingletonTest();
				}
			}
		}
		return instance;
	}
}

二、工厂设计模式

工厂方法模式:

  1. 工厂方法模式分为三种:普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
  2. 多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
  3. 静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

1、普通工厂模式:
建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

interface Sender {
    void Send();
}  

class MailSender implements Sender {

    @Override
    public void Send() {
        System.out.println("This is mail sender...");
    }
}

class SmsSender implements Sender {

    @Override
    public void Send() {
        System.out.println("This is sms sender...");
    }
}

public class FactoryPattern {
    public static void main(String[] args) {
        Sender sender = produce("mail");
        sender.Send();
    }
    public static Sender produce(String str) {
        if ("mail".equals(str)) {
            return new MailSender();
        } else if ("sms".equals(str)) {
            return new SmsSender();
        } else {
            System.out.println("输入错误...");
            return null;
        }
    }
}

2、多个工厂方法模式:
该模式是对普通工厂模式的改进,在普通工厂模式中,如果传递的字符串出错,则不能正确的创建对象,而多个工厂模式是多个工厂方法,分别创建对象。

interface Sender {
    void Send();
}

class MailSender implements Sender {

    @Override
    public void Send() {
        System.out.println("This is mail sender...");
    }
}

class SmsSender implements Sender {

    @Override
    public void Send() {
        System.out.println("Thi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值