ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一、创建者设计模式

2022-05-27 02:32:41  阅读:162  来源: 互联网

标签:创建者 对象 创建 模式 should Principle 工厂 设计模式


一、设计模式总览

  • 创建型模式(Creational Patterns)
    • 单例(Singleton)模式
    • 原型(Prototype)模式
    • 工厂方法(FactoryMethod)模式
    • 抽象工厂(AbstractFactory)模式
    • 建造者(Builder)模式
  • 行为型模式(Behavioral Patterns)
    • 模板方法(Template Method)模式
    • 策略(Strategy)模式
    • 命令(Command)模式
    • 职责链(Chain of Responsibility)模式
    • 状态(State)模式
    • 观察者(Observer)模式
    • 中介者(Mediator)模式
    • 迭代器(Iterator)模式•
    • 访问者(Visitor)模式
    • 备忘录(Memento)模式
    • 解释器(Interpreter)模式
  • 结构型模式(Structural Patterns)
    • 代理(Proxy)模式
    • 适配器(Adapter)模式
    • 桥接(Bridge)模式•
    • 饰(Decorator)模式
    • 外观(Facade)模式
    • 享元(Flyweight)模式
    • 组合(Composite)模式
    • 过滤器模式(Filter Pattern)

二、组件的生命周期

image-20220527014625354

三、设计模式七大原则

3.1 开闭原则(Open Closed Principle,OCP)

软件实体应当对扩展开放,对修改关闭(Software entities should be open forextension,but closed for modification)

扩展新类而不是修改旧类

3.2 里氏替换原则(Liskov Substitution Principle,LSP)

继承必须确保超类所拥有的性质在子类中仍然成立(Inheritance should ensure that anyproperty proved about supertype objects also holds for subtype objects)

继承父类而不去改变父类

3.3 依赖倒置原则(Dependence Inversion Principle,DIP)

高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules shouldnot depend upon low level modules.Both should dependupon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)

面向接口编程,而不是面向实现类

3.4 单一职责原则(Single Responsibility Principle,SRP)

一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be morethan one reason for a class to change)

每个类只负责自己的事情,而不是变成万能

3.5 接口隔离原则(Interface Segregation Principle,ISP)

一个类对另一个类的依赖应该建立在最小的接口上(The dependency of one class to anotherone should depend on the smallest possible interface)。

各个类建立自己的专用接口,而不是建立万能接口

3.6 迪米特法则(Law of Demeter,LoD)

最少知识原则(Least Knowledge Principle,LKP)

只与你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and notto strangers)

无需直接交互的两个类,如果需要交互,使用中间者

3.7 合成复用原则(Composite Reuse Principle,CRP)

又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)

软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现

优先组合,其次继承

四、创建型模式(CreationalPatterns)

为什么用创建型模式:

  • 创建型模式关注点“怎样创建出对象?
  • 将对象的创建与使用分离”。
  • 降低系统的耦合度•
  • 使用者无需关注对象的创建细节
    • 对象的创建由相关的工厂来完成;(各种工厂模式)
    • 对象的创建由一个建造者来完成;(建造者模式)
    • 对象的创建由原来对象克隆完成;(原型模式)、
    • 对象始终在系统中只有一个实例;(单例模式)

4.1 单例(Singleton)模式

一个单一的类,负责创建自己的对象,同时确保系统中只有单个对象被创建。

  • 单例特点
  • 某个类只能有一个实例;(构造器私有)
  • 它必须自行创建这个实例;(自己编写实例化逻辑)
  • 它必须自行向整个系统提供这个实例;(对外提供实例化方法)
  • 单例(Singleton)模式-应用场景
  • 多线程中的线程池
  • 数据库的连接池
  • 系统环境信息
  • 上下文(ServletContext)

4.2 原型(Prototype)模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。

本体给外部提供一个克隆体进行使用

  • 原型(Prototype)模式-应用场景
    • 资源优化•性能和安全要求
    • 一个对象多个修改者的场景。
    • 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时可以考虑使用原型模式拷贝多个对象供调用者使用。
    • 深(两个完全对象不一样的【递归克隆】,内容却完全一样)、浅(只是属性

4.3 工厂(Factory)模式

工厂模式(Factory Pattern)提供了一种创建对象的最佳方式。我们不必关心对象的创建细节,只需要根据不同情况获取不同产品即可。难点:写好我们的工厂

image-20220527015650318

简单工厂(Simple Factory )

image-20220527015714773

工厂方法(Factory Method)

image-20220527015751302

抽象工厂(Abstract Factory)

image-20220527015808392

image-20220527015828739

4. 4 建造者(Builder)模式

image-20220527015915523

  • 什么场景用到?

    • StringBuilder:append();给谁append呢?

    • Swagger-ApiBuilder:

    • 快速实现。Lombok-Builder模式•......

  • 编写代码的时候使用到了设计模式。

  • 类+模式

  • •xxxFactory•xxxTemplate•xxxBuilder•xxxFacede

标签:创建者,对象,创建,模式,should,Principle,工厂,设计模式
来源: https://www.cnblogs.com/wuzhixuan/p/16316053.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有