设计模式的六大原则

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更加容易被他人理解、保证代码可靠性。设计模式是代码编制真正工程化(工程化即系统化、模块化、规范化的一个过程。指将具有一定规模数量的单个系统或功能部件,按照一定的规范,组合成一个模块鲜明、系统性强的整体),是软件工程的基石。

从新的角度对常用的23种设计模式分类:
接口型模式:适配器模式(Adapter)、外观模式(Facade)、组合模式(Composite)、桥接模式(BridgePattern)
责任型模式:责任链模式(Chain of Responsibility)、单例模式(Singleton)、观察者模式(Observer)、中介者模式(Mediator)、代理模式(Proxy)、享元模式(Flyweight)
构造型模式:生成器模式(Builder Pattern)、工厂方法模式(Factory Pattern)、抽象工厂模式(Abstract Factory Pattern)、原型模式(Prototype Pattern)、备忘录模式(Memento Pattern)
操作型模式:模板方法模式(Template Method)、状态模式(State Pattern)、策略模式(Strategy Pattern)、命令模式(Command Pattern)、解释器模式(Interpreter Pattern)
扩展型模式:装饰器模式(Decorator)、迭代器模式(Iterator)、访问者模式(Visitor)
总原则-开闭原则
对扩展开放,对修改封闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。
想要达到这样的效果,我们需要使用接口和抽象类等。
 
1、单一职责原则
不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。
 
2、里氏替换原则(Liskov Substitution Principle)
任何基类可以出现的地方,子类一定可以出现。里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
里氏代换原则是对“开-闭”原则的补充。实现“开闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。里氏替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。
 
3、依赖倒转原则(Dependence Inversion Principle)
面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。
 
4、接口隔离原则(Interface Segregation Principle)
每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。
 
5、迪米特法则(最少知道原则)(Demeter Principle)
一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。
最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。
 
6、合成复用原则(Composite Reuse Principle)
尽量首先使用合成/聚合的方式,而不是使用继承。
 

 

转载于:https://www.cnblogs.com/Vam8023/p/8463913.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

作业7

stuNum 201709090072 print(年级是:stuNum[0:4]) print(专业编号是: stuNum[4:9]) print(序号是: stuNum[-3:]) stuNum 440982201812111876 print(所在省市:stuNum[0:2]) print(所在地区:stuNum[2:4]) print(所在县区:stuNum[4:…

linux进程退出没有log,Linux下应用进程消失原因分析-Go语言中文社区

应用部署在Linux环境下,如果出现未知原因导致应用进程被杀(应用日志中没有任何异常现象,日志出现中断现象),如果对于进程消失原因没有特别明确的方向,可以考虑从系统日志(/var/log/messages)方面查找原因。 命令参考egrep -i kill…

数学是成就卓越开发人员的必备技能

编者按:原文作者Alan Skorkin是一名软件开发人员,他在博客中分享对软件开发相关的心得,其中有很多优秀的文章,本文就是其中一篇,作者认为:成为优秀的开发人员,可以没有数学技能,但成…

Flask爱家租房--celery(总结)

0. celery整体逻辑图 个人理解为:此处的客户端client与以往定义的客户端(前端)并不一样,角色相当于以往的后端逻辑处理代码,即发布任务的一方,只是相当于处理者worker而言是客户端。 1.准备工作&#xff1…

linux端口514启动,Linux查看端口使用状态及启动(示例代码)

Netstat -tln 命令是Linux查看端口使用情况/etc/init.d/vsftp start 是用来启动ftp端口~!看文件/etc/servicesnetstatLinux查看端口查看已经连接的服务端口(ESTABLISHED)netstat -aLinux查看端口查看所有的服务端口(LISTEN,ESTABLISHED)sudo netstat -ap…

window服务器开站点(不通用)

此文章为记录自己的配置流程,其他人不通用 网站服务器:Windows server 2008 R2 (IIS6.1) Asp.net 数据库服务器:Windows server 2008 R2 SQL Server 2008 R2 1.解析域名到服务器,如:www.test.com 2.登录网站服务器&a…

【转载】优秀文章转载集合

Spring Spring Cache 注释驱动的 Spring cache 缓存介绍使用 Spring 2.5 注释驱动的 IoC 功能虚拟化 libvirt kvm 虚拟机上网 – Bridge桥接KVM详解,太详细太深入了,经典Tomcat Linux机器同时运行两个tomcat点评:主要是那张图片的配置 Nginx …

Flask爱家租房--celery(发送验证短信)

0.配置文件 # coding:utf-8BROKER_URL "redis://127.0.0.1:6379/1" CELERY_RESULT_BACKEND redis://127.0.0.1:6379/21.启动文件 # coding:utf-8from celery import Celery from ihome.tasks import config# 定义celery对象 celery_app Celery("ihome"…

理论与实践:不要过度思考

你每天都在仔细翻阅Hacker News,惊奇于那些经过整理的创业传奇、功效无比的最佳实践理论、天才的技术解决方案,以及各种链接指向的大量的一站式的,极简主义的,色彩柔和的网站。你参加过精益(Lean)创业研讨会,读过了《F…

linux我如何查看一个脚本的路径,linux获取shell脚本所在绝对路径操作介绍

脚本名:a.sh位置:/tmp/whuang/study/java脚本内容:复制代码代码如下:#!/bin/shthis_dirpwddirname $0|grep "^/" >/dev/nullif [ $? -eq 0 ];thenthis_dirdirname $0elsedirname $0|grep "^/." >/dev/nullretval$…

Go编程技巧--io.Reader/Writer

Go原生的pkg中有一些核心的interface,其中io.Reader/Writer是比较常用的接口。很多原生的结构都围绕这个系列的接口展开,在实际的开发过程中,你会发现通过这个接口可以在多种不同的io类型之间进行过渡和转化。本文结合实际场景来总结一番。 总…

把base64转为blob

let blob1 dataURItoBlob(this.img); 转载于:https://www.cnblogs.com/miaSlady/p/9073550.html

Flask爱家租房--房屋管理(获取房东发布的房源信息条目)

文章目录0.效果展示1.重点总结2.后端代码3.前端html4.前端js0.效果展示 1.重点总结 1)用户点击“我的房源”,页面开始加载,此时myhouse.js限定只有完成实名认证的房东才可以查询已有的房源信息,因此myhouse.js首先调用用户认证的…

TCP如何利用不可靠的IP协议实现可靠传输

IP协议之所以是不可靠的是因为IP网络存在冲突丢包及传输错误甚至被恶意篡改的情况;虽然IP协议是不可靠的,但其服务的上层协议为了规避这些不可靠的因素,有些协议就会自己设计机制从而保证自己传输的内容可靠;TCP就是其中之一&…

jsp通过include指令引入html乱码的解决方法

本文转自&#xff1a;https://blog.csdn.net/gnail_oug/article/details/51707061 在jsp中使用<%include file"in.html" %>导入html页面时&#xff0c;如果html页面里有中文&#xff0c;就会产生乱码。检查jsp文件和html文件的编码&#xff0c;编码一致&#x…

linux怎么删干净mysql,linux怎么干净卸载mysql

1、查找以前是否装有mysql命令&#xff1a;rpm -qa|grep -i mysql可以看到如下图的所示&#xff1a;说明之前安装了&#xff1a;MySQL-client-5.5.25a-1.rhel5MySQL-server-5.5.25a-1.rhel52、停止mysql服务、删除之前安装的mysql删除命令&#xff1a;rpm -e –nodeps 包名# rp…

各大互联网公司java开发面试常问问题

本人是做java开发的&#xff0c;这是我参加58&#xff0c;搜狐&#xff0c;搜狗&#xff0c;新浪微博&#xff0c;百度&#xff0c;腾讯文学&#xff0c;网易以及其他一些小的创业型公司的面试常被问的问题&#xff0c;当然有重复&#xff0c;弄清楚这些&#xff0c;相信面试会…

14种方法助你参与开源项目

导读&#xff1a;每日[快讯精选]是由CSDN研发频道推出的特色栏目&#xff0c;每一天我们将从国外技术媒体(例如Hacker News、Reddit...等等)中挑选出有价值的新闻简讯&#xff0c;让您在第一时间掌握业界主流的技术文摘&#xff0c;每天清晨为您献上第一份技术早餐。 [1]Javac…