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

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

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

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

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

一、单一职责(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 条评论
登录 后参与评论

相关文章

来自专栏刘明的小酒馆

事务与一致性:刚性or柔性?

在高并发场景下,分布式储存和处理已经是常用手段。但分布式的结构势必会带来“不一致”的麻烦问题,而事务正是解决这一问题而引入的一种概念和方案。我们常把它当做并发操...

69710
来自专栏编程札记

MQ对比之RabbitMQ &Redis

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

553
来自专栏mini188

Java模拟Windows的Event

场景 开发中遇到一个场景,业务操作会不定时的产生工作任务,这些工作任务需要放入到一个队列中,而另外会有一个线程一直检测这个队列,队列中有任务就从队列中取出并进行...

1776
来自专栏张善友的专栏

Ibatis in action 电子书

电子书 ? 是ibatis 项目组写的ibatis开发的权威书籍.现在只有电子版,目前使用Java作为描述的平台,这个书对于.NET和Ruby一样适用.    ...

1827
来自专栏博客园迁移

分布式事务 小结

分布式事务    如果系统规模较小,数据表都在一个数据库实例上,上述本地事务方式可以很好地运行,   但是如果系统规模较大,比如用户A账户表和用户B账户表显然不...

601
来自专栏Java面试笔试题

什么是DAO模式?

DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访...

742
来自专栏Java Edge

软件设计七大原则实战(三)-依赖倒置原则1 定义

依赖倒置原则(Dependence Inversion Principle,DIP) High level modules should not depend...

582
来自专栏非著名程序员

鸡蛋问题来了,是先有Class还是先有Object?

周末比较无聊,在浏览论坛的时候,偶然看到一个程序猿提问的问题,他时这样提问的:突然想到一个很菜的问题, 倒底先有Object还是先有Class?所有类都是Obj...

1776
来自专栏Java架构师学习

日志: 分布式系统的核心日志的应用

最近这段时间一直在研究消息队列、文件系统、数据库等,慢慢的发现他们都有一个核心组件:日志.有时也叫write-ahead logs 、commit logs 或...

2757
来自专栏加米谷大数据

如何避免HBase写入过快引起的各种问题

client api ==> RPC ==> server IPC ==> RPC queue ==> RPC handler ==> write WAL ==...

742

扫描关注云+社区