# designPattern **Repository Path**: zhangbw666/designPattern ## Basic Information - **Project Name**: designPattern - **Description**: 设计模式学习笔记 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-27 - **Last Updated**: 2022-10-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## DesignPattern 设计模式学习笔记 最近有很多粉丝留言:“学设计模式有什么用啊,好像我工作中都用不到设计模式,但每次面试都要问实际项目中使用了哪些设计模式,我都答不上来。” 面对这样的问题,我想说设计模式真的很重要。曾经我也认为学设计模式没什么用,但用过了都说好。所以,猿人花了一个星期的时间给大家整理了最常用的设计模式,通过源码和文档的形式分享给大家。 希望大家认真学习掌握,真正学以致用。不仅面试时要对答如流,实际工作中也要加以应用,这样能力才会得到提升。 >顺带宣传一下我关注的这个原创公众号:专注于 Java 编程技术和程序员软实力的方方面面,欢迎小伙伴们扫一扫关注一下,一定会大有所获。 ![猿码天地](https://ymtd-1307390667.cos.ap-guangzhou.myqcloud.com/img-wechat/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7.jpg) ### 一、设计模式介绍 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 ### 二、目的 为了提高代码的可读性,可扩展性以及代码的复用性,为了解决在写代码过程中遇到的代码设计问题。 ### 三、六大原则 #### 3.1 开闭原则 >对扩展开放,对修改关闭(尽可能对代码少修改) #### 3.2 里氏替换原则 >它是面向对象基本原则之一,任何父类(基类)出现的地方,子类都可以出现,也就是子类可以替换父类的任何功能(体现了父类的可扩展性) #### 3.3 依赖倒转原则 >尽可能面向接口编程,依赖接口而不依赖类。 #### 3.4 接口隔离原则 >一个类如果能实现多个接口,尽可能实现多个,为了降低依赖,降低耦合。 #### 3.5 最少知道原则 >一个实体尽可能少的与其他实体产生相互关联关系,将实体的功能独立。 #### 3.6 合成复用原则 >​尽量使用合成,聚合的方式,而不使用继承。 ### 四、种类 Java 中一般认为有23种设计模式,当然暂时不需要所有的都会,但是其中常见的几种设计模式应该去掌握。 总体来说设计模式分为三大类: * 创建型模式,共五种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 * 行为型模式,共十一种:策略模式、责任链模式、模板方法模式、观察者模式、迭代器模式、命令模式、备忘录模式、状态模式、访问者模式、中介模式、解释器模式。 * 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 ### 五、源码实战 #### 5.1 创建型模式 #### 单例模式-[Singleton](https://gitee.com/zhangbw666/designPattern/tree/master/Singleton) >单例模式是创建对象的一种特殊方式,程序从始至终都只创建一个对象叫单例(单实例) #### 工厂方法模式-[Factory](https://gitee.com/zhangbw666/designPattern/tree/master/Factory) >工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。在同一等级结构中,支持增加任意产品。 #### 抽象工厂模式-[Factory](https://gitee.com/zhangbw666/designPattern/tree/master/Factory) >创建对象的过程不再由当前类实例化,而是由工厂类完成,在工厂类中只需要告知对象类型即可,工厂模式中必须依赖接口。 #### 建造者模式-[Builder](https://gitee.com/zhangbw666/designPattern/tree/master/Builder) >工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性。建造者Builder它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。 #### 5.2 行为型模式 #### 策略模式-[Strategy](https://gitee.com/zhangbw666/designPattern/tree/master/Strategy) > 定义一系列算法,将其一一封装,并使他们相互可以替换,该模式可以使得算法能够独立于使用它的用户而变化。该模式包含三个角色:策略、上下文和具体策略。 #### 迭代器模式-[Iterator](https://gitee.com/zhangbw666/designPattern/tree/master/Iterator) >迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又无需暴露该对象的内部实现,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。 #### 模板方法模式-[Template](https://gitee.com/zhangbw666/designPattern/tree/master/Template) >定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式确实很简单,仅仅使用了java的继承机制,但是它是一个应用非常广泛的模式,其中AbstractClass叫做抽象模板,它的方法分为两类:基本方法(由子类去实现)和模板方法(可以有一个或多个,也就是一个框架,实现对基本方法的调度,完成固定的逻辑)。为了防止恶意的操作,一般模板方法上都添加上final关键字,不允许被覆写。 #### 5.3 结构型模式 #### 代理模式-[Proxy](https://gitee.com/zhangbw666/designPattern/tree/master/Proxy) >代理模式是指给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 #### 适配器模式-[dapter](https://gitee.com/zhangbw666/designPattern/tree/master/dapter) >适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。 #### 装饰器模式-[Decorator](https://gitee.com/zhangbw666/designPattern/tree/master/Decorator) >动态地给一个对象增加一些额外的职责,增加对象功能来说,装饰模式比生成子类实现更为灵活。 ![23种设计模式彩图](https://ymtd-1307390667.cos.ap-guangzhou.myqcloud.com/img-other/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%BD%A9%E5%9B%BE.jpg) >你多学一样本事,就少说一句求人的话,现在的努力,是为了以后的不求别人,实力是最强的底气。记住,活着不是靠泪水博得同情,而是靠汗水赢得掌声。——《写给程序员朋友》 ## [猿码天地-Java知识学堂脑图](https://www.processon.com/view/link/6035ed1f079129248a64a6af) (查看文件密码:请关注公众号【猿码天地】,回复关键字‘活到老学到老’获取) ## [猿码天地-Java超神之路脑图](https://www.processon.com/view/link/6035f068e0b34d124437e0e1) (查看文件密码:请关注公众号【猿码天地】,回复关键字‘活到老学到老’获取)