设计模式一(单例模式、工厂模式)

简介

23种设计模式 主要类别如下:
创建型:

创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。
工厂模式单例模式、生成器模式、原型模式

结构型:

用于帮助将多个对象组织成更大的结构。
结构型模式主要有适配器模式adapter、桥接模式bridge、组合器模式component、装饰器模式decorator、门面模式、亨元模式flyweight和代理模式proxy。

行为型:

用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。行为型模式主要有命令模式command、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式state、策略模式、模板模式和访问者模式。

单例模式

实现单例模式需要三步:

  • 将构造函数私有化
  • 在类的内部创建实例
  • 提供获取唯一实例的方法

单例模式分为饿汉式和简单懒汉式

1. 饿汉式

//饿汉式(直接创建出一个对象,并返回)
public class Singleton{

    //私有化构造函数
    private Singleton(){  
    }
    
    //创建对象
    private static Singleton ins=new singleton();
    
    //返回唯一对象
    public static Singleton getInstance(){
        return ins;
    }
}

缺点:一上来就创建对象,如果没有用过会造成内存浪费

2. 简单懒汉式

//懒汉式
public class Singleton{
    //私有化构造函数
    private Singleton(){}
    
    //先不创建对象,等用到的时候再创建
    private static volatile Singleton ins=null;  //避免重排序,volatile有内存屏障的功能
    //调用到这个方法了,证明是要被用到的了
    public static Singleton getInstance(){
        if(ins==null){                         //这个判断主要为了提高性能
            synchronized(Singleton.class){     //使用synchronized将锁的范围缩小,提高性能
                if(ins==null){                 //再判断一次是否为null(主要的判断)
                    ins=new Singleton();
                }
            }
        }
        return ins;
    } 
}

单例模式应用场景:
1.资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。
2.控制资源的情况下,方便资源之间的互相通信。如线程池等。
例子:
1、网站的计数器,一般也是采用单例模式实现,否则难以同步。
2、据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。

工厂模式

在这里插入图片描述

简单工厂模式(并不是23种模式中的)

参考的Head first 设计模式

工厂处理创建对象的细节。一旦有了SimplePizzaFactory,orderPizza()就变成此对象的客户。当需要披萨,就要pizza工厂做。
orderPizza()方法只需要关心从工厂得到一个披萨。
简单

工厂方法模式

提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例。

工厂方法模式通过让子类决定该创建的对象是什么,最终达到将对象创建的过程封装的目的。
在这里插入图片描述
代码可以参考:

https://github.com/TanDawn1/DesignPattern

工厂模式应用场景:
SpringIOC参照的就是工厂模式创建Bean

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值