一篇搞定23种设计模式

本文深入探讨设计模式,包括开闭原则、里式替换原则、依赖倒置原则等七大软件开发原则,以及创建型、结构型、行为型三大设计模式分类。详细解析单例模式、原型模式、工厂方法模式等多种模式,帮助开发者提升代码质量和可维护性。

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

额,好累,不想写了,这里有两个写的特别好的,有需要的可以去看看
http://c.biancheng.net/view/1317.html
设计模式内容聚合

设计模式

设计模式是面向对象中反复出现的问题的解决方案,是有众多软件开发人员经过长时间的实现和错误总结出来的,可以说是最佳的经验。使用设计模式可以增加代码的可重要性、可读性、可靠性。

- 软件开发的七项原则

  • 开闭原则:对扩展开放,对修改关闭。
  • 里式替换原则:继承必须保证父类所拥有的性质在子类中仍然成立。
  • 依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。---------核心思想是:要面向接口编程,不要面向实现编程。
  • 单一职责原则:不要存在多于一个导致类变化的原因。即同一个类只负责一项职责。
  • 接口隔离原则:客户端不应该依赖它不需要的接口,一个类对于另一个类的依赖应该建立在最小的接口上。即接口尽量小,让接口只包含客户感兴趣的方法。
  • 迪米特法则:又叫最少知识法则,一个对象应当对其它对象尽可能少的了解,不和陌生人说话。
  • 合成复用法则:在软件复用时,尽量先使用组合或聚合等关联关系来实现,其次才考了使用继承关系来实现。

- 设计模式可以分为三类:

  • 创建型模式:描述怎样怎样创建对象,将对象的创建和使用分离。
  • 结构型模式:描述如何将类或对象结合在一起,按照某种布局形成更大的结构。
  • 行为型模式:描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。

- 创建型模式:

单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式。

- 结构型模式

代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式。

- 行为型模式

模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式。

–单例模式

— 定义
	一个类只有一个实例,且该类能自行创建这个实例的一种模式。
— 特点
 - 只有一个实例对象。
 - 该实例对象必须由单例类自行创建。
 - 单例类对外提供一个访问该类的方法。
— UML图

在这里插入图片描述

— 单例模式的实现
主要有两种:饿汉式单例、懒汉式单例
---- 1.饿汉式单例
类一旦加载就创建为一个实例对象,保证在调用getInstance()方法前该实例对象就已经存在
---- 2.懒汉式单例
类加载时不创建唯一实例,在调用getInstance()方法时创建唯一实例对象并返回 
  • (1).线程不安全。
  • (2).线程安全,使用synchronized对getInstance()方法加锁。
  • (3).线程安全,使用volatile对修饰唯一实例singleton,保证singleton的可见性,使用synchronized修饰初始化singleton的代码块。
  • (4).线程安全,使用静态内部类SingletonHolder,调用getInstance()方法实例化SingletonHolder,初始化一个唯一实例INSTANCE

虚拟机会保证一个类的类构造器<clinit>()在多线程环境中被正确的加锁、同步,
如果多个线程同时去初始化一个类,那么只会有一个线程去执行这个类的类构造器<clinit>(),其他线程都需要阻塞等待,直到活动线程执行<clinit>()方法完毕。
特别需要注意的是,在这种情形下,其他线程虽然会被阻塞,但如果执行<clinit>()方法的那条线程退出后,其他线程在唤醒之后不会再次进入/执行<clinit>()方法。
因为在同一个类加载器下,一个类型只会被初始化一次。如果在一个类的<clinit>()方法中有耗时很长的操作,就可能造成多个线程阻塞,在实际应用中这种阻塞往往是隐藏的。

  • (5).线程安全,使用枚举

–原型模式

— 定义
	用一个已经创建的实例作为原型,通过复制该对象来创建一个与原型相同或相似的新对象。
— UML图

在这里插入图片描述

— 原型模式的实现
	深拷贝和浅拷贝
---- 1.浅拷贝
直接使用Object的clone()方法
---- 2.深拷贝
引用类型分别新建对象并赋值给拷贝的对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值