设计模式与设计原则 —— 一句话
一、设计原则
二、设计模式
范围\目的 | 创建型模式 | 结构型模式 | 行为型模式 |
---|---|---|---|
类模式 | 工厂方法 | (类)适配器 | 模板方法、解释器 |
对象模式 |
单例 原型 抽象工厂 建造者 |
代理 (对象)适配器 桥接 装饰 外观 享元 组合 |
策略 命令 职责链 状态 观察者 中介者 迭代器 访问者 备忘录 |
设计模式是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
面向对象的设计原则:单一职责原则(Single Responsibility Principle,SRP): 一句话:设计类的时候要保证功能单一,不要乱七八糟包含其它设计; 开放封闭原则(Open Closed Principle,OCP): 一句话:类在设计时候,要尽可能保证完整性,做好全面的设计;后期不要再对类进行更改,但一定要允许类对外扩展;这就是对修改封闭,对扩展开放; 依赖倒转原则(Dependence Inversion Principle,DIP): 里氏替换原则(Liskov Substitution Principle,LSP): 迪米特法则(Law of Demeter,LoD): 接口分离原则(Interface Segregation Principle,ISP): 合成复用原则(Composite Reuse Principle,CRP): |
设计模式:单例(Singleton)模式:指一个类只有一个实例,且该类能自行创建这个实例。 在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。 一句话:因为单例的构造方法是私有的,所以不能被其它类 new,从而保证内存中只有一个对象。 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。 工厂方法(Factory Method)模式:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 一句话:简单工厂违背开闭原则,工厂模式对其进行了优化,结果是一个工厂创建一个产品;这样通过实例化不同的工厂来得到不同的产品。缺点显而易见,客户端需要知道各个工厂的方法; 简单工厂模式:如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背“开闭原则”。 一句话:利用java多态特性,设计父与多个子类来实现产品设计;创建调度类(工厂类) 实例化不同的子类;这样客户端调用时只需要实例化工厂类和相应参数,就可以实例出不同产品。 利用简单工厂写个例子,设计一个加减乘除计算器:点击查看; 抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。 抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。 一句话:抽象工厂是对工厂模式的延申;如果抽象工厂 建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。 代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。 一句话:代理模式就是把一个插件封装,不让外部直接访问插件,而是通过封装类作为入口访问; 适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 桥接(Bridge)模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 装饰(Decorator)模式:动态的给对象增加一些职责,即增加其额外的功能。 外观(Facade)模式:为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。 享元(Flyweight)模式:运用共享技术来有效地支持大量细粒度对象的复用。 组合(Composite)模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。 模板方法(TemplateMethod)模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。 命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。 职责链(Chain of Responsibility)模式:把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。 状态(State)模式:允许一个对象在其内部状态发生改变时改变其行为能力。 观察者(Observer)模式:多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。 中介者(Mediator)模式:定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。 迭代器(Iterator)模式:提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 访问者(Visitor)模式:在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。 备忘录(Memento)模式:在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。 解释器(Interpreter)模式:提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。 |
设计模式与设计原则 —— 一句话相关推荐
- 设计模式-六大设计原则(附加实际开发建议以及计算器例子)
使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.设计模式使代码编制真正工程化,是软件工程的基石脉络,如同大厦的结构一样. 文章结构: 1.单一职责原则(SRP): 2.里氏替换原 ...
- 设计一个矩形类rectangle_万字长文带你捋清六种设计模式的设计原则(建议收藏)...
对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去.可是,在日常的打码中,用的最多的就是单例,其次是观察者和建造者模式 ( bu ...
- 设计模式 - 七大设计原则(一)
设计模式 - 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个 ...
- Go设计模式(3)-设计原则
上一篇文章Go设计模式(2)-面向对象分析与设计里讲过,做设计最重要的是保留合适的扩展点.如何才能设计出合适的扩展点呢? 这篇文章会讲解一下经典的设计原则.这些设计原则大家可能都听过,但可能没有想过为 ...
- 【设计模式】设计原则
[设计模式]设计原则 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 1 开闭原 ...
- 设计模式七大设计原则
文章目录 1.什么是设计模式 2.单一职责原则 3.开闭原则 4.接口隔离原则 5.依赖倒置原则 6.迪米特法则(最少知道原则) 7.里式替换原则 8.组合优于继承 设计模式主要是为了满足一个字 变, ...
- Java设计模式六大设计原则
从今年的七月份开始学习设计模式到9月底,设计模式全部学完了,在学习期间,总共过了两篇:第一篇看完设计模式后,感觉只是脑子里面有印象但无法言语.于是决定在看一篇,到9月份第二篇设计模式总于看完了,这一篇 ...
- Java设计模式-七大设计原则
Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...
- 后端学习 - 设计模式与设计原则
文章目录 设计原则 1 单一职责原则 2 开闭原则 3 Liskov 替换原则 4 依赖倒置原则 5 接口隔离原则 6 迪米特法则 设计模式:创建型模式 1 工厂模式 2 抽象工厂模式 3 单例模式 ...
最新文章
- docker 中删除dead状态的容器
- mdf与ldf文件如何还原到SQLserver数据库
- 啊啊啊...每次需求评审总被boss虐成狗?解药来了
- Windows下使用Notepad++修改二进制文件,exe可执行文件
- YOLO学习-2:win10(64位)+ python3.6 + TensorFlow-GPU + keras + yolov3测试实践(增加笔记本显卡GPU加速)
- 小试用python搭建自己的web服务器
- c++控制台应用每一列数据如何对齐_懂Excel就能轻松入门Python数据分析包pandas(十六):合并数据...
- Python 夺大满贯!三大编程语言榜即将全部“失守”!
- mysql5.6 load_MySQL 5.6 dump/load buffer pool实验
- 让Android Studio 使用上vs的android模拟器
- python中or的用法_解析python中and与or用法
- Impala SQL语句 COMPUTE STATS
- DHT11温湿度传感器
- libvlc外用api
- (详细)Windows10系统自动修复方法
- 智能中线保护装置-零线电流保护器-中性线保护装置
- 管理系统中计算机应用真题及答案文档,2013年4月管理系统中计算机应用真题及答案...
- Linux:帮助命令——help、man、info的简单介绍
- js控制excel打印完美解决方案
- logrotate详情和坑点
热门文章
- DNN网络(三)python下用Tensorflow实现DNN网络以及Adagrad优化器
- 查询数据库中所有表名称
- 关于fsockopen pfsockopen函数被禁用的解决方法
- ECSHOP删除商品名称或文章标题后的省略号
- ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程
- 发布一个域安全级别的无代码InfoPath表单作为文档库模版 (InfoPath 一)
- myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)
- 解决登录页验证码不能正常显示问题
- 【pycharm】pycharm上安装tensorflow,报错:AttributeError: module ‘pip‘ has no attribute ‘main‘ 解决方法
- 【重磅】华为:2021数字化转型,从战略到执行.pdf(附103页原文下载链接)