浅学设计模式学习一 创建型模式

本文介绍了设计模式中的创建型模式,包括工厂模式、抽象工厂模式和单例模式的概念及应用。工厂模式通过封装实例化过程,提高代码复用性;抽象工厂模式在工厂模式基础上增加一层抽象,提供更灵活的实例化选择;单例模式确保一个类只有一个实例,提供全局访问点。文章通过代码示例解析了各个模式的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

今儿看看设计模式,先来点官方的解释吧。
设计模式是基于面向对象的俩原则:
1.对接口编程而不是实现编程
2.优先对象组合而不是继承

看到这脑子就懵懵的,抽象的含义也不是给我指定了哪个应用场景,那就先了解一下

对接口编程而不是实现编程
这句话其实就是很好的利用了我们Java面向对象的多态,多态吗就是一个接口使用了不同的实例进行了不同的操作
这代码就很好的阐述了接口编程 代码中可以看到abstract修饰符,那就简单复习一下呗:
1.abstract类不能new对象,要想创建只能重写abstract类的方法,简单来说就是等同于你的接口,里面肯定不能直接new啊
2.abstract不能和private连用,private修饰过的不能继承到子类
3.abstract也不能和final连用,final修饰过的也不能继承到子类
4.更不能和static连用,加了static倒是子类可以继承,但是加了static的方法直接调用的是父类的方法,不是子类的,父类的方法也是抽象的,调用也白调。

然后我再写一下实现编程的代码

这里是引用 从父类其实我们已经可以看出,父类已经定义好方法参数里面的类型了,定义好的话就等于是一个方法对准一个实例化了,别的类在进行实例化要传的参数还是唯一那一个类型,这样的话,实例化一个写一个,这不是玩呢,延展性,复用性为0,维护性太差。

设计模式类型

23种设计模式一共分为三大类:创建型模式,结构型模式,行为型模式
这篇文章就说创建型模式,写的太长我自己回头懒得看…
**

含义

**
创建型模式:在合适的时间去实例化需要的对象,在我自己的理解以及和同事的沟通下,就是你啥时候用这个对象,你再去创建,不要还没用,就上来实例化一大堆,目的就是提高灵活性。

创建型模式包括:

  1. 工厂模式(Factory Pattern)
  2. 抽象工厂模式(Abstract Factory Pattern)
  3. 单例模式(Singleton Pattern)
  4. 建造者模式(Builder Pattern)
  5. 原型模式(Prototype Pattern)

工厂模式

先说说工厂模式,工厂模式是最常用的设计模式之一,关键逻辑就是创建过程在子类执行,看看代码吧。
在这里插入图片描述在这些代码中,我的类名不太规范,不符合驼峰命名,当然我是懒得想名字,然后工厂模式的代码写完之后,给我的整体感觉就是复用性强,把可以公用的都封装起来,吧实例化对象的操作交给一个中间件,也就是所说的给子类,延迟创建,工厂模式在Java代码感觉无处不在。
以上就是关于工厂模式的个人总结。

抽象工厂模式

再说一下抽象工厂模式,我同事让我先去看一下抽象类和接口的区别,简单说一下,之前背的头疼。
1.抽象类的关键字是abstract,接口是interface修饰的
2.抽象类如果想要重写它的方法,要不你写个类继承他,要不你用抽象类继承,用抽象类继承的好处就是我不一定要继承它的方法,普通类就必须继承。
普通类:在这里插入图片描述
抽象类:在这里插入图片描述
3.抽象类只能被继承(extends),接口只能被实现(interface),抽象类只能被继承,我自己的理解就是,你管是不是抽象类,不加abstract,他就是个普通类,普通类不加final修饰符这些,铁定只能被继承。

4.他俩都不能被实例化,想实例化,就继承or实现
5.接口里面的变量通常使用public,static,final定义,在这里插入图片描述必须给一个初始值而且是不能被改变的,不给就是报错,写了之后发现就是直接置灰了,那就证明接口里定义的常量已经是被修饰过的。
抽象类的变量默认是被default修饰的,它可以不给初始值,也可能在抽象类的子类中更改值,子类必须是抽象类。代码如下在这里插入图片描述
接着看抽象工厂模式,它其实就是在工厂模式中又封装了一层,工厂模式把公用的方法封装了一个类,公用的方法也可能有很多种,所以又定义了一个抽象类,把那些公用的方法放到里面。

定义的两个实现接口的类在这里插入图片描述
定义的抽象工厂
在这里插入图片描述
抽象类的非抽象子类
在这里插入图片描述
以上就是关于抽象工厂模式的个人总结。

单例模式

是Java最简单的设计模式之一,就是一个单一的类,负责创建自己的对象,确保只有单个对象被创建,可以直接访问,不用实例化。
整代码:在这里插入图片描述
看完之后,第一反应就是这跟实例化有什么区别,其实就是他呢就是把创建对象的权力交给了自己,并且只能创建一个对象。加了修饰符不让测试的时候实例化,人家自己已经实例化过了,再实例化也没必要。

单例模式的几种实现方式:
懒汉模式-未加锁:
在这里插入图片描述这个实现方式不考虑线程安全问题,因为一旦多个线程就会走不下去,因为没加锁synchronized。

懒汉式-加锁:
在这里插入图片描述其实就是加锁了而已,支持多线程了,好处就是第一次调用的时候才去实例化对象,避免不必要的内存浪费,但是这个同步的时候,执行效率比较慢。

饿汉式:在这里插入图片描述
我觉得饿汉式就是,我管你用不用,我直接给你都实例化出来,这个太消耗内存了,这个多线程是安全的,引用的类加载器的机制。

双重加锁式:
在这里插入图片描述 在多线程的情况下,也能保持线程安全。

静态内部类:
在这里插入图片描述
在主动调用的时候,才会去实例化对象

枚举类:
在这里插入图片描述支持序列化,避免多次实例化,比较简洁。

建造者模式:
使用多个简单的对象一步步构建成一个复杂的对象,就比如你吃饭的A套餐,B套餐,其实都是老一套的东西组成了组合,这些东西是不会改变的,就建立了组合,优点就是扩展性强。但是如果这些东西变动性比较大,拿使用建造者模式要去写很多的建造类。很麻烦…这个建造者模式我理解的并不是太透彻,只能学到一些简单的思想,二刷的时候再来补充第二遍理解的内容吧。

原型模式:
原型模式是对于占内存资源大的对象,可以采用克隆方式,克隆前克隆后引用的是一个,而不是又在堆中创建了一个新对象。
在这里插入图片描述
这也学到了一个新的点就是HashTable的用处,感觉挺好用。
刚才涉及到盲区就是克隆分为深克隆,浅克隆。俺同事给我讲了一下,感觉理解了。
浅克隆:
在这里插入图片描述
深克隆:
在这里插入图片描述

以上只是个人的理解以及学习,有很多不足,欢迎补充!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值