设计模式专题(一)——面向对象的设计原则

设计模式专题(一)——面向对象的设计原则

(原创内容,转载请注明来源,谢谢)

设计模式在程序中,主要服务于设计类、接口等,是以面向对象为基础的,因此面向对象的设计原则是各设计模式中都会考虑与体现的。本篇内容主要从全局角度讲述设计模式的原则,具体每种设计模式的实现,将在后续的文章中逐个写明。

面向对象的设计共有五大原则。

一、单一职责(SRP)

1、含义

单一职责主要满足两点内容:相同的职责避免分散到多个类中;一个类中避免承担太多的职责。

2、最明显体现单一职责的设计模式主要是工厂模式和命令模式。

3、示例

要实现不同数据库的连接,即可以采用工厂模式,通过用户输入的数据库类型,自动进行连接。主要需要实现以下内容:

1)定义接口,要求继承该接口的类都要实现query、where、order、from、select等方法;

2)定义工厂类,其中一个方法通过用户输入的数据库类型,拼接出相应的实现该类型数据库连接的类;

3)实现各类数据库连接的类,每种数据库定义一种类。

4)调用工厂类,输入数据库名,实现连接数据库。

二、接口隔离(ISP)

1、含义

接口隔离主要要求:客户端(如调用接口的类)不应被迫接受不需要的接口,导致被迫定义空方法;一个类对另一个类的依赖应建立在最小接口上。

2、最明显体现接口隔离的设计模式主要是策略模式和代理模式。

三、开放-封闭原则(OCP)

1、含义

开放-封闭原则要求:模块在扩展性上开放,在更改性上封闭;模块在扩展的时候,应该尽量减少对现有模块的改造和影响。

2、最明显体现接口隔离的设计模式主要是装饰模式。

四、替换原则(LSP)

1、含义

替换原则要求:子类型必须能够替换父类型,并出现在父类型任何能出现的地方。因此,满足LSP原则的类,要求基础父类的子类,要覆盖到父类的所有方法,即要求子类调用父类的方法,或者对父类中的方法进行重写。

五、依赖倒置(DIP)

1、含义

依赖倒置要求:上层模块不应依赖下层模块,而应是共同依赖与一个抽象;抽象不依赖于具体,具体依赖于抽象。其核心就是解耦,使各类之间的依赖度降低。

2、实现方式

在高层次的类中提出接口的声明,在低层次中实现接口;高层次的类通过抽象接口使用服务。

——written by linhxx 2017.6.30

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-06-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

软件开发中的原则

一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。(Every object should have a single responsibilit...

615
来自专栏闻道于事

spring中的scope详解

spring容器中的bean默认是单例模式的,改成非单例模式需要在类上加上@Scope("prototype")

472
来自专栏KK的小酒馆

Android设计模式二

在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。

712
来自专栏KK的小酒馆

Android设计模式一

模式定义 定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使子类可以不改变(复用)一个算法的结构即可重定义...

952
来自专栏微信公众号:Java团长

Spring框架简介

随着软件结构的日益庞大,软件模块化趋势出现,软件开发也需要多人合作,随即分工出现。如何划分模块,如何定义接口方便分工成为软件工程设计中越来越关注的问题。良好的模...

972
来自专栏java一日一条

Java高级特性之枚举学习总结

在Java SE5之前,我们要使用枚举类型时,通常会使用static final 定义一组int常量来标识,代码如下

652
来自专栏Java技术

SqlSessionTemplate是如何保证MyBatis中SqlSession的线程安全的?

周六的时候发了一篇面试题的整理《2018年最全Java面试通关秘籍汇总集!》,又在底部留言中补充了一道关于SqlSession线程安全性的问题,今天就带大家初步...

943
来自专栏java学习

Java每日一练(2017/8/23)

最新通知 ●回复"每日一练"获取以前的题目! ●【新】Android视频更新了!(回复【安卓视频】获取下载链接) ●【新】Ajax知识点视频更新了!(回复【学习...

2626
来自专栏desperate633

深入理解Spring框架的作用(Spring in action 学习笔记)激发POJO的潜能依赖注入应用切面使用模板消除样板式代码

纵览Spring , 读者会发现Spring 可以做非常多的事情。 但归根结底, 支撑Spring的仅仅是少许的基本理念, 所有的理念都可以追溯到Spring最...

963
来自专栏pangguoming

全面理解面向对象的 JavaScript

前言 当今 JavaScript 大行其道,各种应用对其依赖日深。web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而...

35410

扫码关注云+社区