单例设计模式及其举例

 单例设计模式:一个类只允许有一个对象,将这个对象作为一个全局的访问点,提供出去供大家使用
 

分析:
 * 1.用户只能一个对象
 * 2.全局的访问点:得到的对象就是全局的访问点,如何做到全局?让static去修饰
 * 3.如何提供出去?
 * 4.供大家使用?---单例的功能

 
 * 单例类的作用:1.可以实现两个对象之间的传递
 * 好处:可以让两个对象在完全没有关系的前提下,实现值的传递,降低了耦合性,提高了内聚性
 

//饿汉式--在定义变量的同时完成初始化
class SingleInstance{
    //2.在类的内部创建一个当前类型的属性并赋值---在类的内部得到了当前类的一个对象
    //将变量私有化,让外界无法访问,给变量用static修饰让它成为全局的访问点
     private static SingleInstance singleInstance = new SingleInstance();
    
    //1.将构造方法私有化
    private  SingleInstance() {}    
    //3.使用公共的方法将变量提出去,并将方法设置成静态的
    public static SingleInstance getInstance() {
        return singleInstance;
    }    
}

//懒汉式--开始只是定义变量,什么时候使用什么时候赋值
class SingleInstance1{
    //2.在类的内部创建一个当前类型的属性并赋值---在类的内部得到了当前类的一个对象
    //将变量私有化,让外界无法访问,给变量用static修饰让它成为全局的访问点
     private static SingleInstance1 singleInstance = null;    
    //1.将构造方法私有化
    private  SingleInstance1() {}    
    //3.使用公共的方法将变量提出去,并将方法设置成静态的
    public static SingleInstance1 getInstance() {
        if(singleInstance==null) {
        singleInstance = new SingleInstance1();
        }
          return singleInstance;
    }
       //4.单例的功能区
    int num;

    }
public class Demo5 {
    public static void main(String[] args) {
        SingleInstance singleInstance1=SingleInstance.getInstance();
        SingleInstance singleInstance2=SingleInstance.getInstance();
        System.out.println(singleInstance1==singleInstance2);  //true,说明获取到的是同一个对象    
        //实例:完成的功能:将A类中的num1值传给B类对象的num2        
        A a=new A();
        a.num1=4;
        B b = new B();            
//        //直接赋值,一般类的成员变量是私有的,所有不推荐
//        b.num2 = a.num1;
//        
//        //通过传参间接赋值
//        b.test(a);
//        //通过单例实现传值
        
        a.ceshi();
        b.ceshi2();
    }
}

//测试单例的功能
class A{
    int num1;
    public void ceshi() {
        SingleInstance1 singleInstance= SingleInstance1.getInstance();
        singleInstance.num=num1;        
    }
}

class B{
    int num2;
    //通过传参赋值
    public void test(A a) {
        num2=a.num1;    
    }    
    public void ceshi2() {
        SingleInstance1 singleInstance = SingleInstance1.getInstance();
        num2 = singleInstance.num;
    }
}

在Java中,设计模式是一种用来解决特定场景问题的最佳实践。在面试过程中,对设计模式的理解和应用能力是非常重要的。下面我将介绍几种常用的设计模式及其应用场景。 工厂模式(Factory Pattern)是Java中最常用的设计模式之一,属于创建型模式。它通过提供一种统一的接口来创建对象,使得代码更加清晰易读。工厂模式的应用场景包括:当一个类不知道它所需要的对象的类时;当一个类希望由子类来指定所创建对象的类时;当一个类将创建对象的职责委托给多个辅助子类中的其中一个时。 除了工厂模式,还有其他常用的设计模式。例如,单例模式(Singleton Pattern)用于限制一个类只能创建一个实例,常用于需要全局访问点的场景。适配器模式(Adapter Pattern)用于将一个类的接口转换成客户端所期望的另一个接口,常用于解决接口不兼容的问题。观察者模式(Observer Pattern)用于定义对象间的一对多依赖关系,当一个对象的状态发生变化时,其相关依赖对象都会收到通知,常用于实现事件监听和发布订阅模型。 在面试时,重要的是要将设计模式实际业务场景进行结合,展示出对设计模式的理解和应用能力。举例来说,当面试官问到如何设计一个购物车系统时,可以考虑使用组合模式(Composite Pattern)来表示购物车中的商品和商品组,使用策略模式(Strategy Pattern)来实现不同的计价策略,使用观察者模式来实现库存变化时的通知等。通过结合实际场景,能够更好地展示出对设计模式的理解和灵活运用能力。 此外,面试中还会涉及Java的基础知识。最常考察的点之一是HashMap和ConcurrentHashMap的区别和使用。HashMap是线程不安全的,适用于单线程环境;而ConcurrentHashMap是线程安全的,适用于多线程环境。此外,面试官可能会问到Java的不同版本新技术特性,需要了解每个版本的更新内容和主要特性,例如Java 8的Lambda表达式和Stream API,Java 9的模块化系统等。 总之,在面试过程中,要对不同的设计模式及其应用场景有一定的了解,并能够将其与实际业务场景结合起来。此外,还需掌握Java的基础知识,特别是常考察点如HashMap和ConcurrentHashMap,以及不同版本的新技术特性。这样才能给面试官留下深刻的印象。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值