Java中的设计模式

                                                 单例模式

单例设计模式的一般定义:一个类中只允许有一个实例

实现思路:让类的构造方法私有化,同时提供一个静态方法来实例这个类。

对单例的实现可以分为两大类— — 懒汉式和饿汉式,他们的区别在于:

  • 懒汉式:指全局的单例实例在第一次被使用时创建
  • 懒汉式:在静态方法中初始化。时间换空间。(不推荐,时间很重要)

  • 饿汉式:指全局的单例实例在类装载时构建

  • 饿汉式:在声明对象就初始化。空间换时间。(推荐,空间不是问题)

代码:


//懒汉式
public class Single {
     
    /*volatile关键字的一个作用是禁止指令重排,把instance声明为volatile之后,对它的写操作就会有 
     一个内存屏障(什么是内存屏障?),这样,在它的赋值完成之前,就不用会调用读操作。*/
    private static volatile Single instance;
    
    //构造器私有,可以防止外部类的调用
    private Single() {}

    /*如果有两个线程(T1、T2)同时执行到这个方法时,会有其中一个线程T1获得同步锁,得以继续执行, 
     而另一个线程T2则需要等待,当第T1执行完毕getInstance之后(完成了null判断、对象创建、获得返 
     回值之后),T2线程才会执行执行。*/

    public static Single getInstance() {
        //效率问题,只有instance为null的时候,才能进入synchronized的代码段
        if (instance == null) {
            //多线程可能导致问题,加上同步锁
            synchronized (Single.class) {
                //防止出现多个实例
                if (instance == null) {

                    instance = new Single();

                }

            }

        }

        return instance;

    }

}
//饿汉式
public class SingleB {

    /*由于INSTANCE的初始化是在类加载时进行的,而类的加载是由ClassLoader来做的,所以开发者本来对 
      于它初始化的时机就很难去准确把握:
      1.可能由于初始化的太早,造成资源的浪费
      2.如果初始化本身依赖于一些其他数据,那么也就很难保证其他数据会在它初始化之前准备好。
    */

    //创建对象
    private static final SingleB INSTANCE = new SingleB();
    
    //私有的构造方法
    private SingleB() {}

    //供外部调用的方法静态方法
    public static SingleB getInstance() {

        return INSTANCE;

    }

}

懒汉式:在静态方法中初始化。时间换空间。(不推荐,时间很重要)

饿汉式:在声明对象就初始化。空间换时间。(推荐,空间不是问题)

                                                   工厂模式

简单工厂设计模式的一般定义:简单工厂又叫静态工厂,由一个工厂对象决定创建哪一个产品对象

实现思路:写一个类,让他制造出我们想要的对象

代码:

public class 学生工厂  {

    //get方法通常是静态的,所以也称之为静态工厂
    public static 学生 getStudent(int type) {
        
        //利用switch创建学生并返回
        switch (type) {
        case 学生类型.学神:
            return new 学神();
        case 学生类型.学霸:
            return new 学霸();
        case 学生类型.学弱:
            return new 学弱();
        case 学生类型.学渣:
            return new 学渣();
        default:
            break;
        }
        return null;
    }
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种强大的编程语言,它提供了许多不同类型的设计模式来帮助开发人员编写更加模块化、可扩展和易于维护的代码。 以下是一些Java常用的设计模式: 1. 单例模式(Singleton Pattern):保证一个类只有一个实例,并提供一个全局访问点。 2. 工厂模式(Factory Pattern):使用工厂方法来创建对象,而不是直接调用构造函数。 3. 抽象工厂模式(Abstract Factory Pattern):提供一个接口来创建一系列相关或依赖对象的工厂,而不需要指定它们的具体类。 4. 观察者模式(Observer Pattern):定义对象之间的一对多的依赖关系,当一个对象改变状态时,它的所有依赖对象都会收到通知并自动更新。 5. 适配器模式(Adapter Pattern):将一个类的接口转换成另一个客户端所期望的接口,从而使得原本不兼容的类能够协同工作。 6. 模板方法模式(Template Method Pattern):定义一个算法的骨架,将一些步骤延迟到子类实现,使得子类可以改变算法的某些特定步骤,而不改变算法的整体结构。 7. 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,同时又不改变其原有的结构。 8. 迭代器模式(Iterator Pattern):提供一种方法访问一个容器对象各个元素,而又不暴露该对象的内部细节。 9. 策略模式(Strategy Pattern):定义一系列的算法,将它们封装起来,并使它们可以互相替换,从而使得算法的变化独立于使用它们的客户端。 10. 命令模式(Command Pattern):将一个请求封装成一个对象,从而使得可以用不同的请求对客户端进行参数化,并支持可撤销的操作。 以上只是一些Java常用的设计模式,不过Java还有许多其他类型的设计模式可以用来帮助解决各种问题。在实际开发,根据具体的需求和情况选择合适的设计模式非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值