设计模式学习之路-设计模式什么

设计模式是什么?我能想到的是「套路」,或者说是「最佳实践」。要写出「好代码」,我们需要遵循一些「最佳实践」,就好像我们要培养优秀的个人品行,需要遵循一些「美德」。
以下是美国国父富兰克林给自己列的「美德」清单:
1. 节制:食不可饱,衣不过量。
2. 慎言:只讲对人对己有益之言,不说无聊琐碎之话。
3. 条理:让拥有的每件东西都各有其位,让要做的每件事都各有其时。
4. 坚毅:一旦决定做一件事,就马上义无反顾的去做。
5. 节俭:将钱用在于人于己有益的事情上,杜绝浪费。
6. 勤奋:不耽误任何时间,总是在干有用的事情,终止不必要的行为。
7. 真诚:不采用任何有害的欺骗行为,想问题和说话都要公平公正。
8. 正直:绝不做损人利己之事。
9. 适度:避免极端,避免别人对你产生怨恨。
10. 清洁:决不允许身体、衣服和居所不洁。
11. 心静:不被琐碎之事,寻常之事,和不可避免之事萦绕。
12. 贞洁:不过度行房事,也不因男女关系损害和他人的关系。
13. 谦卑:以耶稣和苏格拉底为楷模。

为什么列这么多美德?富兰克林的逻辑是把美德分的细一些,每个美德只包含一个简单、清晰的外延,这样就更容易做到了。
这么多美德记都记不过来,怎样才能做到?富兰克林的方案是一周只注重培养其中一个美德,这样13周就是一个周期,一年可以循环4次。
以上的13条美德和2条富兰克林的实践,就是富兰克林培养优秀个人品行的「设计模式」吧?

回到设计模式,设计模式中也有一些「美德」,我们简称它们为六大设计原则。

设计模式的六大原则

单一职责原则 Single Responsibility Principle

定义:一个类应该只有一个发生变化的原因。
There should never be more than one reason for a class to change.

开闭原则 Open Closed Principle

定义:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.

里氏替换原则 Liskov Substitution Principle

定义:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所在的对象o1都代换为o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。
If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T,the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.

迪米特法则 Law of Demeter

定义:一个对象应该对其他对象有最少的了解。
Only talk to your immediate friends.

接口隔离原则 Interface Segregation Principle

定义:客户端不应该依赖它不需要的接口。
Clients should not be forced to depend upon interfaces that they don’t use.

依赖倒置原则 Dependence Inversion Principle

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
High level modules should not depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstractions.

设计模式的分类

  • 创建型模式

    1. 简单工厂模式 Simple Factory Pattern
    2. 工厂方法模式 Factory Method Pattern
    3. 抽象工厂模式 Abstract Factory
    4. 建造者模式
    5. 单例模式
  • 结构型模式
    1. 设配器模式
    2. 桥接模式
    3. 装饰模式
    4. 外观模式
    5. 享元模式
    6. 代理模式
  • 行为型模式
    1. 命令模式
    2. 中介者模式
    3. 观察者模式
    4. 状态模式
    5. 策略模式

实际使用场景

Spring核心容器的主要组件是BeanFactory,它是工厂模式的实现。

参考链接
http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/simple_factory.html

时间: 2024-11-03 16:42:40

设计模式学习之路-设计模式什么的相关文章

优化-java设计模式学习问题?

问题描述 java设计模式学习问题? 我网站的基本功能都已实现,现在要对网站版本升级优化,想快速了解设计模式相关内容,求各位好人推荐视频教程,各种培训机构的都行~ 解决方案 java设计模式学习java-单例设计模式学习7.18_java学习_单例设计模式 解决方案二: 爱酷学习网去看看.里面是软件编程教训视频 解决方案三: 有一个故事版本的java设计模式的,百度一下就出来了 解决方案四: 百度一下,设计模式,会有很多视频和介绍的

设计模式学习笔记系列

设计模式学习笔记(二十二)-FlyWeight享元模式 设计模式学习笔记(二十一)-Composite模式 设计模式学习笔记(二十)-Visitor访问者模式 设计模式学习笔记(十九)-Chain of Responsibility职责链模式 设计模式学习笔记(十八)-Mediator中介者模式 设计模式学习笔记(十七)-Memento备忘录模式 设计模式学习笔记(十六)-Proxy模式 设计模式学习笔记(十五)-State模式 设计模式学习笔记(十四)-Command模式 设计模式学习笔记(十

设计模式学习笔记(十)—Factory Method模式

<设计模式>一书对Factory Method模式是这样描述的: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.FactoryMethod使一个类的实例化延迟到其子类. 我的理解:FatoryMethod模式是一种创建型模式,定义一个用于创建对象的接口的意思是说,我们要定义一个用于创建对象的接口(或者说抽象类,实际上就是个抽象工厂abstractFactory),它的内部有一个创建对象的方法,这个方法的返回值是一个接口(或者抽象类)的类型,这个方法就是FactoryMethod:让子类

JavaScript设计模式学习之“类式继承”

 这篇文章主要介绍了JavaScript设计模式学习之"类式继承",本文直接用代码实例讲解类式继承的实现方法,需要的朋友可以参考下     在做一件事情之前,首先要清楚做这件事情的好处有什么,相信不会有哪个人愿意无缘无故的去做事情.一般说来,我们在设计类的时候,实际上就是希望能减少重复性的代码,使用继承可以完美的做到这一点,借助继承机制,你可以在现有类的基础上再次进行设计并且充分利用它们已经具备的各种方法,而对设计的修改也更为轻松.废话不多说了,举例说明: 代码如下: function

我的设计模式学习笔记------&amp;gt;Java设计模式总概况

设计模式(Design Pattern)的概念最早起源于建筑设计大师Alexander的<建筑的永恒方法>一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计领域.在<建筑的永恒方法>一书中是这样描述模式的: 模式是一条由三个部分组成的通用规则:他表示一个特定环境.一类问题和一个解决方案之间的关系.每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计. 软件领域的设计模式也有类似的定义:设计模式是对处于特

请推荐哪些开源代码可以作为设计模式学习的素材

问题描述 请推荐哪些开源代码可以作为设计模式学习的素材,谢谢! 解决方案 struts: Chain of Responsibility(struts1.0), MVC, Spring: Factory, Singleton(配置), ProxyHibernate: Composite(Criteria), DAO(Database层)Swing: Adapter(Event 模式),Command(Menu),Decorator(JScrollPane)J2SE: Facade(InputSt

设计模式学习总结

       之前一直是面向过程编程,前段时间因为某些原因需要更好的去理解一下面向对象思想精髓,在别人的推荐下看了<大话设计模式>这本书.通过对29个模式的学习,不仅仅了解了设计模式是个什么回事,也稍微加深了一点对面向对象(Object-oriented)技术.面向对象技术关注的是对象,对象的优点在于,可以定义自己负责的事物,作要求它自己的事情.对象应该自己负责自己,而且应该清楚地定义责任.它具有三大特征:封装.多态.继承.        封装(Encapsulation),也就是把客观事物封

javascript设计模式:JavaScript设计模式学习一之接口

看完了<JavaScript王者归来>,在图书馆找了<JavaScript设计模式>来看,之前设计模式方面的书看过:<Head First 设计模式>.<设计模式之禅>,GOF的<Design Patterns: Elements of Reusable Object-Oriented Software>看了一部分.记得以前没这些基础的时候,看<JavaScript设计模式>简直是不知道作者在说什么.言归正传:准确的说,JavaScr

我现在是一个C#程序员,想问问学习之路

问题描述 我现在是一个C#程序员,已经工作两年了,怎么说呢?现在有点迷茫,不知道要学些什么,能用一些什么,现在把NHibernate看了遍,然后呢?框架,架构,设计,计算还是什么,希望有人能解决这个问题,C#程序员学习的未来道路,现在要看的书,要用的技术- 解决方案 解决方案二:可以升入研究一下其他的.NET技术嘛.wpf,wcf,wf,siverlight等技术.解决方案三: 解决方案四:这些是没有的,关键还是要学历,考研,才是出路解决方案五:引用3楼chongyiren的回复: 这些是没有的