![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 69
每一个不曾起舞的日子,都是对生命的辜负
这个作者很懒,什么都没留下…
展开
-
类之间的关系
在这个示例中,Car 类和 Engine 类之间存在强关联关系,因为每辆车都拥有(包含)一个引擎,而引擎也是车的一个组成部分。在 NewCar 函数中,当我们创建一个新的 Car 实例时,同时也会创建一个新的 Engine 实例。如此一来,Car 对象的生命周期和 Engine 对象的生命周期就相互依赖了。注意,关联关系即可以按关联方式分类,也可以按关联性强弱分类。是按两种维度来进行划分的。关联方式与关联性强弱没有相关性。原创 2023-07-15 15:06:53 · 159 阅读 · 0 评论 -
领域驱动设计
限界上下文定义了领域的边界在同一界限上下文中,我们可以使用统一的语言进行交互。用来封装通用语言和领域对象,提供上下文环境,保证在领域之内的一些术语、业务相关对象等有一个确切的含义,没有二义性。我们将限界上下文内的领域模型映射到微服务,就完成了从问题域到软件的解决方案一个限界上下文理论上就可以设计为一个微服务。领域模型由领域对象组成。领域对象包括以下几种实体值对象聚合领域事件领域服务领域对象都是为了解决业务问题而创建的,它们应当包含足够的业务逻辑,而不仅仅是数据的容器。原创 2022-09-16 13:16:51 · 1631 阅读 · 1 评论 -
重构:改善既有代码的设计
1. 提炼函数1.1 提炼函数的动机何时重构:需要花时间才能弄懂一段代码对于api,我们不需要去弄明白代码如何实现,只需要知道功能,则不需要重构大量短小函数会让程序跑的更快,更容易被缓存当函数超过10行就应该考虑提炼函数1.2 做法创造新函数,根据意图进行命名(”做什么“来命名,而不是“怎么做”命名)将待提炼代码复制到新的函数中若提炼的代码引用了作用域限于源函数,则以参数的形式传递给新函数在源函数中,将被提炼代码段替换为对目标函数的调用测试若其他代码与被提炼代码有相似处,使用以原创 2022-05-13 01:13:47 · 995 阅读 · 0 评论 -
领域驱动设计
1. 基本概念1.1 模块模块是DDD中明确提到的一种控制限界上下文的手段。我的理解就是模块是微服务拆分单元对于模块内的组织,一般是按照领域对象,领域服务,领域资源库,防腐层等组织方式定义的1.2 领域对象对应之前设计中的实体对象,但是与以往的仅有getter,setter的实体对象不同,领域对象具有了行为,对象更加丰满。同时对比将这些逻辑写在服务内(如mvc的service层中),领域功能的内聚性更强,职责更加明确1.3 资源库领域对象需要资源存储。以前我们是通过ORM直接映射原创 2022-05-04 17:33:22 · 621 阅读 · 0 评论 -
23种设计模式
1. 模板方法模式定义一个操作中算法的骨架(稳定),而将一些步骤(变化)延迟到子类中。 可以使得子类不改变一个算法的结构即可重定义该算法的某些步骤。 “不要调用我,让我来调用你”2. 策略模式定义一系列算法,把它们一个个封装起来,并且使它们可相互替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化 对于变化部分抽出接口,让客户端依赖接口(稳定)而不是依赖细节(变化) 策略模式提供了用条件判断语句以外的一种选择,消除条件判断语句,就是在解耦合3. 观察者模式定义对象间的一原创 2022-03-12 01:47:08 · 261 阅读 · 0 评论 -
行为型模式之观察者模式
1. 作用观察者模式也叫发布-订阅模式 定义对象间的一种一对多的依赖关系。当一个对象状态改变时,所有它所依赖的对象都会得到通知并自动更新。2. 结构抽象主题:管理观察者(通过集合或者数组),可以实现观察者的增删以及通知操作。 具体主题:抽象主题的实现类 抽象观察者:定义了回调接口方法 具体观察者:继承了抽象观察者,实现了回调接口方法。3. 用到的设计原则依赖倒转原则:主题依赖抽象观察者4. 总结在项目开发中非常常用的一种设计模式,将发布订阅者模式更好理解 对象只要订阅了.原创 2021-10-15 15:23:21 · 64 阅读 · 0 评论 -
结构型模式之代理模式
1. 作用为其他对象提供了一种代理对象以控制对目标对象的访问。 侧重点强调的是提供代理对象实现对目标对象的访问,而不是对目标对象的增强(虽然许多代理模式确实也做了这个,但这个不是代理模式的主要目的)。2. 分类静态代理:代理类是静态的 组合 继承 动态代理:代理类是动态生成的 基于接口:cglib动态代理 基于继承:jdk动态代理 3. 基于组合的静态代理Subject:是被代理类和代理类的父接口,里面包含了要被代理的方法。 RealSubject:被代理类 P原创 2021-10-15 14:13:53 · 56 阅读 · 0 评论 -
结构型模式之装饰器模式
1. 作用在不改变类对象及其类定义的情况下,为对象添加额外功能和对原有功能进行增强。 装饰器模式的核心思想是基于核心功能提供额外的功能。 为了实现灵活低对类对象功能进行扩展2. 组成结构Component:统一接口,装饰类和被装饰类都实现了该接口(该接口定义的方法就是装饰者要增强的方法) ConcreteComponent:被装饰者 Decorator:装饰者类,实现了Component,又聚合了抽象接口Component。可以对呗装饰者类可以对原有的功能进行增强。 Concrete原创 2021-10-15 13:43:39 · 62 阅读 · 1 评论 -
设计模式的八大原则
1. 单一职责原则尽量让一个类负责一个职责,这样既降低了类的复杂度,又解决了代码过于耦合 但是也会导致设计的类太多的问题。 这个原则是否使用视情况而定。2. 开闭原则一个类的功能(方法)只能够被扩展,而不能被修改。 如果要实现开闭原则,则设计一个类时,当这个类的一个功能后续可能还需要扩展时,则应该将这个类设计为抽象类或者接口,把实现推迟的子类,这样当后续要扩展这个功能时,只需要实现对应的接口即可,这样就不会修改原有的代码了。3. 里氏替换原则子类可以扩展父类功能(方法)的作用,但是不能原创 2021-10-15 11:21:05 · 98 阅读 · 0 评论 -
行为型模式之策略模式
1. 定义定义一系列算法,将每一个算法都封装起来(策略),并且它们可以相互替换。使得算法可以独立于使用它的客户而变化 把一个系列的算法封装到一系列的策略类里面,我们给环境分配不同的策略则就按照不同的算法来执行2. 组成环境类(Context):维护了一个抽象策略类的引用。 抽象策略类(Strategy):定义所有支持的算法的公共接口。环境类就是通过这个接口引用来调用某个具体策略类实例定义的算法。 具体策略类(ConcreteStrategy):以抽象策略类接口实现某写具体算法3. 应用原创 2021-09-17 15:26:23 · 61 阅读 · 0 评论