当前位置: 首页 > news >正文

设计模式入门----设计模式的7大原则与23种设计模式概述(转载)

由于设计模式多而繁琐,但其设计遵循一定的原则,理解了设计原则应该有助于理解设计模式。所以这里就先从七大设计原则讲起,然后逐步讲解设计模式:

 

七大设计原则:

1、单一职责原则[Single Responsibility Principle]:一个类负责一项职责.
2、里氏替换原则[Liskov Substitution Principle]:继承与派生的规则.
3、依赖倒置原则[Dependence Inversion Principle]:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程.
4、接口隔离原则[Interface Segregation Principle]:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少.
5、迪米特法则[Law Of Demeter]:低耦合,高内聚.
6、开闭原则[Open Close Principle]:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭.

7、组合/聚合复用原则[Composition/Aggregation Reuse Principle(CARP)]:尽量使用组合和聚合少使用继承的关系来达到复用的原则.

 

二十三种设计模式:

创建型模式

1、生成器模式(Builder pattern): 使用生成器模式封装一个产品的构造过程, 并允许按步骤构造. 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示.
2、工厂模式(Factory pattern): 定义了一个创建对象的接口, 但由子类决定要实例化的类是哪一个. 工厂方法让类把实例化推迟到子类.(包括简单工厂模式、工厂方法模式和抽象工厂模式)
3、原型模式(Prototype pattern): 当创建给定类的实例过程很昂贵或很复杂时, 就使用原形模式.
4、单例模式(Singleton pattern): 确保一个类只有一个实例, 并提供全局访问点.

5、多例模式(Multition pattern): 在一个解决方案中结合两个或多个模式, 以解决一般或重复发生的问题.

结构型模式

1、适配器模式(Adapter pattern): 将一个类的接口, 转换成客户期望的另一个接口. 适配器让原本接口不兼容的类可以合作无间. 对象适配器使用组合, 类适配器使用多重继承.
2、桥接模式(Bridge pattern): 使用桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变.
3、组合模式(Composite pattern): 允许你将对象组合成树形结构来表现"整体/部分"层次结构. 组合能让客户以一致的方式处理个别对象以及对象组合.
4、装饰者模式(Decorator pattern): 动态地将责任附加到对象上, 若要扩展功能, 装饰者提供了比继承更有弹性的替代方案.
5、外观模式(Facade pattern): 提供了一个统一的接口, 用来访问子系统中的一群接口. 外观定义了一个高层接口, 让子系统更容易使用.
6、亨元模式(Flyweight Pattern): 如想让某个类的一个实例能用来提供许多"虚拟实例", 就使用蝇量模式.

7、代理模式(Proxy pattern): 为另一个对象提供一个替身或占位符以控制对这个对象的访问.

行为模式

1、责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象.
2、命令模式(Command pattern): 将"请求"封闭成对象, 以便使用不同的请求,队列或者日志来参数化其他对象. 命令模式也支持可撤销的操作.
3、解释器模式(Interpreter pattern): 使用解释器模式为语言创建解释器.
4、迭代器模式(Iterator pattern): 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露其内部的表示.
5、中介者模式(Mediator pattern) : 使用中介者模式来集中相关对象之间复杂的沟通和控制方式.
6、备忘录模式(Memento pattern): 当你需要让对象返回之前的状态时(例如, 你的用户请求"撤销"), 你使用备忘录模式.
7、观察者模式(Observer pattern): 在对象之间定义一对多的依赖, 这样一来, 当一个对象改变状态, 依赖它的对象都会收到通知, 并自动更新.
8、状态模式(State pattern): 允许对象在内部状态改变时改变它的行为, 对象看起来好象改了它的类.
9、策略模式(Strategy pattern): 定义了算法族, 分别封闭起来, 让它们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户.
10、模板方法模式(Template pattern): 在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中. 模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤.
11、访问者模式(Visitor pattern): 当你想要为一个对象的组合增加新的能力, 且封装并不重要时, 就使用访问者模式.

 

转载至:https://blog.csdn.net/u012050154/article/details/51207024

转载于:https://www.cnblogs.com/technologykai/articles/8795374.html

相关文章:

  • Jenkins手把手图文教程[基于Jenkins 2.164.1]
  • Kubernetes如何通过Device Plugins来使用NVIDIA GPU
  • 极乐技术周报(第二十三期)
  • django.db.utils.OperationalError: (1049, Unknown database 'djangodb')
  • Vue2.0 实现互斥
  • Mongodb 分片集群部署
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • SSL证书过期替换之踩坑总结
  • mysql_config_editor使用简介
  • 2、Android-UI(常用控件)
  • 简述C和C++的学习历程
  • Python使用数据库的基本流程
  • Mybatis 级联查询时只查出了一条数据
  • DevOps GitLab CICD 实践3——CI文件编写
  • 各国脑计划概览
  • [数据结构]链表的实现在PHP中
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • co模块的前端实现
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • iOS 颜色设置看我就够了
  • JavaScript DOM 10 - 滚动
  • Lsb图片隐写
  • Python3爬取英雄联盟英雄皮肤大图
  • Python学习笔记 字符串拼接
  • spring security oauth2 password授权模式
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • ucore操作系统实验笔记 - 重新理解中断
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 规范化安全开发 KOA 手脚架
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 什么是Javascript函数节流?
  • 学习JavaScript数据结构与算法 — 树
  • 阿里云ACE认证之理解CDN技术
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #大学#套接字
  • (26)4.7 字符函数和字符串函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (ibm)Java 语言的 XPath API
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (九)c52学习之旅-定时器
  • (区间dp) (经典例题) 石子合并
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转) ns2/nam与nam实现相关的文件
  • (转)重识new
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net和php怎么连接,php和apache之间如何连接
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @javax.ws.rs Webservice注解
  • @ModelAttribute 注解