文档章节

设计模式基本原理

王子城
 王子城
发布于 06/25 14:03
字数 1104
阅读 13
收藏 0

    刚开始接触编程这行的时候看过设计模式,当时感觉学这些模式没有太大的用处,当时也看不太懂。但是随着慢慢接触这一行,经过一段时间的编程以后,再回过头来看设计模式,发现设计模式的确是太有用了。其实,感觉设计模式是前辈程序员总结下来的编程经验。

    设计模式总共可以分为三大类:

    1.创建型设计模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

    2.行为型设计模式(11) : 策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    3.结构型设计模式(7) : 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

    上面是我们常用的23种设计模式。

    同时,设计模式还有六大原则:

    1.单一职责原则(SRP):一个类只负责一个功能区域,应该仅有一个引起它变化的原因。

    个人理解:单一职责原则就是要去实现高内聚、低耦合,一个类不应该承担太多的功能。开发者需要将一个功能领域中所有的功能写入类当中而不能将其他的功能写在里面,比如:一个连接数据库的工具类当中不能有其它和数据库连接不相关的工具方法。
    2.开放封闭原则(ASD):类、模块、函数等应该是可以拓展的,但是不可修改,类对扩展开放,对修该关闭。

    个人理解:当需求变化的时候,一个类不能满足目前的程序要求,这个时候我们需要做的不是修该代码来满足新的需求,而是在原有的模板当中增加新的功能模块来满足需求。
    3.里氏替换原则(LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。

    个人理解:在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。
    4.依赖倒置原则(DIP):高层模块不应该依赖低层模块,两个都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象,要针对接口编程,而不是针对实现编程。

    个人理解:spring里面的面像切面编程应该就是这个原理。
    5.迪米特原则(LOD):一个软件实体应当尽可能少地与其他实体发生相互作用。

    个人理解:这样做是为了防止代码之间的耦合。
    6.接口隔离原则(ISP):一个类对另一个类的依赖应该建立在最小的接口上。

    个人理解:每一个接口只应该归纳一类功能差不多的方法而不应该有各种各样的方法。我们在编写代码的时候为了方便喜欢将一个类所需要实现的所有方法都写在该类实现的一个接口里面,这样做是不对的,可以将该类所实现的方法进行分类写在不同的接口当中,然后这个类可以去实现多个接口。

    

© 著作权归作者所有

共有 人打赏支持
王子城
粉丝 4
博文 35
码字总数 28927
作品 0
武汉
程序员
设计模式什么的哪有那么神秘 ----第一集 一些吐槽和重构的韵味

一日面试, ...... Hr:你对设计模式熟悉吗? 应聘者A:我了解常用的设计模式,平时经常使用工厂模式和单例模式.而且我也看过一些讲23种设计模式的书.其他不常用的模式用的不是太熟. Hr:你用过外观...

架构梦想
2013/08/04
0
7
编程中的那些套路——关于策略模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 今天讲讲策略模式,策略模式 和工厂模式十分相像(或者说在代码逻辑层面,他们是一样的)。 但策略模式与...

gzchen
08/27
0
0
javascript 设计模式之工厂(Factory)模式

工厂模式介绍 工厂模式是一个创建型的模式,主要就是创建对象。其中工厂模式又分为简单工厂模式和抽象工厂模式。简单工厂模式是通过工厂方法确定创建 对应类型的对象。抽象工厂模式是通过子类...

hlxiong
2014/04/14
0
0
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一生产与一消费:操作栈

1:创建栈代码如下 public class MyStack { private List list = new ArrayList(); synchronized public void push() { try { if (list.size() == 1) {......

起个昵称好难啊
5分钟前
0
0
vue中vuex简单实例

1.安装 npm install vuex --save 2.store.js import Vue from 'vue';import Vuex from 'vuex';Vue.use(Vuex);const store = new Vuex.Store({state: {count: 900000},g......

帝子兮
12分钟前
0
0
使用Golang实现网页爬虫

使用Golang实现网页爬虫

coderminer
14分钟前
0
0
30 个免费的 Sketch 必备插件

简评:中秋三天小长假,要不要学点啥?比如简单的设计?比如用 Sketch 做个项目? Sketch 有许多值得称赞的地方,其丰富的插件就是亮点之一。Sketch 的社区有着大量免费高效的插件。今天这篇...

极光推送
26分钟前
0
0
web打印控件 LODOP的详细api

web打印控件 LODOP的详细api

wangxujun59
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部