24种设计模式的七大原则和三种模型

面向对象设计最困难的地方是把系统分解成对象集合。

**依赖倒置原则在java语言中的体现:**模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;接口或抽象类不依赖于实现类;实现类依赖接口或抽象类。

>结构

桥接模式图的特点:抽象和实现左右两边*abstraction:抽象*implemor:接口对应的是实现>适应性:(背)

***组合模式(对象)**英文名:Composite**>意图:(背)将对象组合成树型结构以表示部分–整体的层次结构。

单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。

*优先使用对象组合而不是继承。

**缺点:***增加新的元素类很困难。

适用于任何等级结构2.结构型模式**适配器(Adapter)模式**将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

因为我们预见性设计变多了的时候,很多情况下会造成一种过度设计。

命令模式可以将请求的发送者和接收者之间实现完全的解耦,发送者和接收者之间没有直接的联系,发送者只需要知道如何发送请求命令即可,其余的可以一概不管,甚至命令是否成功都无需关心。

如何合理的选择该用什么样的设计模式?**单例模式(SingletonPattern):**保证一个类仅有一个实例,并提供一个访问它的全局访问点。

将抽象与实现分离,使它们可以独立变化。

_总的来说设计模式分为3大类:_•**创建型模式(CreationalPatterns)**:(都是用来帮助我们创建对象的)这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new运算符直接实例化对象。

这往往有些大材小用的意味,因为模式实际上是在大型代码库中发挥作用的。

创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。

**1\\.根据目的来分**根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式3种。

**6、合成/聚合复用原则**在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过这些对象的委派达到复用已有功能的目的。

简单工厂模式:由接口直接负责获取产品2、工厂方法模式:客户必须清楚地指出想获取哪种产品;由接口的子类负责获取产品3、抽象工厂模式:客户不知道其想获取哪种产品;由接口中判断调用哪个子类,通过子类获取产品。

b)建议从简单的场景出发,**自己发现或设计出某种模式**。

A、创建模式(5种)**工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

●性能安全:外部状态最好以java的基本类型作为标志,如String,int,可以提高效率。

行为模式观察者模式(ObserverPattern)定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

这些解决方案使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

在我们软件开发中我们可能会对同一个对象有不同的处理,如果我们都做分别的处理,将会产生灾难性的错误。

**命令模式**(CommandPattern):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可取消的操作。

*定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。

了解了这么多,是不是对设计模式有一点点初步的理解了呢?接下来对设计模式有一个大概的分类,然后逐一深入探讨。

**抽象工厂模式(AbstractFactoryPattern):**提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

LSP是开闭原则的补充。

系统使用少量对象,而且这些都比较相似,状态变化小,可以实现对象的多次复用。

**而交流在团队中是一种非常基础,不可或缺的东西,进一步的结果就是,**了解某个设计模式的人认为不了解这个设计模式的人达不到基础水平。

单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。

项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们在开发过程中、各个业务中相似的且又不断重复发生的问题,以及提供了该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

观察者模式:观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象。

而基类与子类的继承关系就是抽象化的具体实现,所以里氏替换原则是对实现抽象化的具体步骤的规范。

**马士兵精讲设计模式视频**大家都知道马士兵老师为行业顶级大牛,很多程序员都是看马士兵老师的java入门课程入门成为java程序员的,如果需要马士兵老师的架构资料,可以转发这篇文章然后关注我,私信回复**马士兵**即可获取备注:(架构视频包含:Springboot、Springcloud、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Spring、MongoDB、ZeroMQ、Git、Nosql、Jvm、Mecached、Netty、Nio、Mina、性能调优、高并发、tomcat负载均衡、大型电商项目实战、高可用、高可扩展、数据库架构设计、Solr集群与应用、分布式实战、主从复制、高可用集群等高端视频。

也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。

**迭代器模式**(IteratorPattern):提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

根据模式的目的来划分的话,GoF(GangofFour)设计模式可以分为以下3种类型:

!在现实生活中,小汽车也是由不同的零部件组装而成,比如上图中我们把小汽车分成引擎、底盘和车身三大部分。