希望大神们能指导我如何学习数据结构和设计模式

设计模式(学以致用)(如何样让自己的大脑就范) - 设计模式&&&&>>&& 设计模式(学以致用)(怎么样让自己的大脑就范)
用模式思考(什么情况下用模式,什么情况下不用模式)
保持简单(用最简单的方法去解决问题。)
要知道何时需要模式……
重构时间就是模式时间
拿掉你所不需要的,不要害怕一个模式充你的设计中删除
如果你现在不需要,就别做。
:告诉你采用一个不好的解决方案解决一个问题。
Java版模式速查手册
云认知:你想怎么才能骗过自己的大脑,让我的大脑记住。把自己的神经点火。
怎么样让自己的大脑就范:
1.慢一点,你看的越多,记住的越少。时不时的停下来,深深的思考一番。
2.勤做练习题,做笔记。
3.上床睡觉前千万别看难懂的书或者学习难懂的知识。随便读。
4.要喝水,多喝水。
5.大声的说出来吧。
6.听听你的大脑怎么说吧:感觉自己的大脑动不起来时,应该休息休息了。
7.要有感觉。
9.设计一些东西。
head first的学习原则:
1.看得到(图,视频加文字)
2.采用一种针对个人的交谈方式
3.让学习的人想的更深
4.引起我的注意,并且一直注意下去
5.影响我的情绪
建议一、只有真正喜欢才能写好程序
建议二、把程序当艺术品,象写诗一样来写代码
建议三、必须写够十万行代码,不要心存侥幸
建议四、时刻保持好奇心
建议五、不要局限在技术本身,多花点精力关注用户
:抽象、封装、继承、多态
封装变化——找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
针对接口编程,而不是针对实现编程。
多组合,少用继承。
为了交互对象的松耦合设计而努力。
对扩展开放,对修改关闭(我想这是相对于类来说的)
依赖抽象,不依赖具体类
最少知识原则:只和你的密友谈话
有一个和是一个的意思:有一个可能是某个抽象类中有一个接口,是一个可能是某个类继承了某个抽象类。
有一个可能比是一个更好。
代码重用(继承),提高维护性和可扩展性。
创建型——
Singleton(单例模式)
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
创建型——FactoryMethod(工厂方法)
:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
Factory Method
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
当一个类不知道它所必须创建的对象的类的时候。
当一个类希望由它的子类来指定它所创建的对象的时候。
当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
创建型——Abstract Factory(抽象工厂)
:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
举例说明:
产生鸭子的抽象工厂,这些鸭子都继承同一个接口(Quackable)
public interface Quackable {
public void quack();
public abstract class AbstractDuckFactory {
public abstract Quackable createMallardDuck();
public abstract Quackable createRedheadDuck();
public abstract Quackable createDuckCall();
public abstract Quackable createRubberDuck();
public class CountingDuckFactory extends AbstractDuckFactory {
public Quackable createMallardDuck() {
return new QuackCounter(new MallardDuck());
public Quackable createRedheadDuck() {
return new QuackCounter(new RedheadDuck());
public Quackable createDuckCall() {
return new QuackCounter(new DuckCall());
public Quackable createRubberDuck() {
return new QuackCounter(new RubberDuck());
AbstractDuckFactory duckFactory = new CountingDuckFactory();
Abstract Factory
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
行为型——
:对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类.
比喻:鸭子类中鸭子们可能会飞,也可能不会飞,所以就不能不飞放在鸭子里,将其对立开来。
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时[ H O 8 7 ]
,可以使用策略模式。
算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
一个类定义了多种行为, 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的S t r a t e g y
类中以代替这些条件语句。
通俗理解:
策略模式:策略,顾名思义,就是面对客户的需求或者是未来的需求,但有些需求是可以大概预测的,但是也有我们
未知的变化,但是一般情况下这个变化是可以限定的。比如鸟儿会叫,但是不一定每个都会叫,这是一种行为,可以
有很多种叫法。所以我们用策略模式来解决他。
行为型——observer(观察者模式
定义了对象之间的一对多依赖关系,这时,当一个对象改变状态时,他的所有依赖着就会收到通知并更新。
比喻:猎头+程序员 = 观察者模式
出版社+订阅者 = 观察者模式,一对多的关系,一个是带有状态的主题,其他是
使用这个主题的使用者
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。
当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。
设计原理:为了交互对象的松耦合设计而努力。
结构型——Decorator(装饰者模式)
比喻:咖啡店里卖咖啡,咖啡杯是被装饰者,咖啡、糖、摩卡等为装饰着。
动态地给一个对象添加一些额外的职责。就增加功能来说,D e c o r a t o r 模式相比生成子类更为灵活。
在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
处理那些可以撤消的职责。
当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
结构型——COMMAND(命令模式)
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
抽象出待执行的动作以参数化某对象,你可用过程语言中的回调(c a l l b a c k
)函数表达这种参数化机制。所谓回调函数是指函数先在某处注册,而它将在稍后某个需要的时候被调用。C o m m a n d 模式是回调机制的一个面向对象的替代品。
在不同的时刻指定、排列和执行请求。一个C o m m a n d
对象可以有一个与初始请求无关的生存期。如果一个请求的接收者可用一种与地址空间无关的方式表达,那么就可将负责该请求的命令对象传送给另一个不同的进程并在那儿实现该请求。
支持取消操作。C o m m a n d 的E x c u t e 操作可在实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。C o
m m a n d 接口必须添加一个U n e x e c u t e 操作,该操作取消上一次E x e c u t e
调用的效果。执行的命令被存储在一个历史列表中。可通过向后和向前遍历这一列表并分别调用U n e x e c u t e 和E x e c u t e
来实现重数不限的“取消”和“重做”。
支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍。在C o m m a n d
接口中添加装载操作和存储操作,可以用来保持变动的一个一致的修改日志。从崩溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用E x e c u t e
操作重新执行它们。
用构建在原语操作上的高层操作构造一个系统。这样一种结构在支持事务( t r a n s a c t i o n
)的信息系统中很常见。一个事务封装了对数据的一组变动。C o m m a n d 模式提供了对事务进行建模的方法。C o m m a n d
有一个公共的接口,使得你可以用同一种方式调用所有的事务。同时使用该模式也易于添加新事务以扩展系统。
结构型——Adapter(_class,_object)适配器
比如:一个美国带回来的电脑,中国的插头不是和它用,这是就要有个适配器来转换电源。
将一个类的接口转换成客户希望的另外一个接口。A d a p t e r
模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
你想使用一个已经存在的类,而它的接口不符合你的需求。
你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
(仅适用于对象A d a p t e r )你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
结构型——Facade
(外观模式)
比喻:一堆零散的个体,比如音箱、DVD、液晶电视……,我如果要看家庭影院,就需要一个一个的将他们开启来,
我的家庭影院才可以开始,这是我们就可以想象我们的模式中,外观模式非常适合。
为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。F
a c a d e 可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过f a c a d e 层。
客户程序与抽象类的实现部分之间存在着很大的依赖性。引入f a c a d e 将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
当你需要构建一个层次结构的子系统时,使用f a c a d e 模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过f a c
a d e 进行通讯,从而简化了它们之间的依赖关系。
行为型:Template Method(模板方法)
设计原则:别找我,我会找你。
例子:咖啡和茶的制作步骤,这里的步骤就可以作为模板方法。
设计模式迷你手册 ---- RedSword软件工作室
Template Method
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Te m p l a t e M e t h o d
使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是O p d y k e 和J o h n s o n
所描述过的“重分解以一般化”的一个很好的例子[ O J 9 3
]。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
控制子类扩展。模板方法只在特定点调用“h o o k ”操作(参见效果一节),这样就只允许在这些点进行扩展。商品编号:
京 东 价:
[定价:¥]
支  持:
搭配赠品:
所 在 地:福建 漳州市
服务支持:
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
大话数据结构--大话设计模式(原创经典)
加载中,请稍候...
商品介绍加载中...
扫一扫,精彩好书免费看
服务承诺:
京东平台卖家销售并发货的商品,由平台卖家提供发票和相应的售后服务。请您放心购买!
注:因厂家会在没有任何提前通知的情况下更改产品包装、产地或者一些附件,本司不能确保客户收到的货物与商城图片、产地、附件说明完全一致。只能确保为原厂正货!并且保证与当时市场上同样主流新品一致。若本商城没有及时更新,请大家谅解!
权利声明:京东上的所有商品信息、客户评价、商品咨询、网友讨论等内容,是京东重要的经营资源,未经许可,禁止非法转载使用。
注:本站商品信息均来自于合作方,其真实性、准确性和合法性由信息拥有者(合作方)负责。本站不提供任何保证,并不承担任何法律责任。
印刷版次不同,印刷时间和版次以实物为准。
价格说明:
京东价:京东价为商品的销售价,是您最终决定是否购买商品的依据。
划线价:商品展示的划横线价格为参考价,该价格可能是品牌专柜标价、商品吊牌价或由品牌供应商提供的正品零售价(如厂商指导价、建议零售价等)或该商品在京东平台上曾经展示过的销售价;由于地区、时间的差异性和市场行情波动,品牌专柜标价、商品吊牌价等可能会与您购物时展示的不一致,该价格仅供您参考。
折扣:如无特殊说明,折扣指销售商在原价、或划线价(如品牌专柜标价、商品吊牌价、厂商指导价、厂商建议零售价)等某一价格基础上计算出的优惠比例或优惠金额;如有疑问,您可在购买前联系销售商进行咨询。
异常问题:商品促销信息以商品详情页“促销”栏中的信息为准;商品的具体售价以订单结算页价格为准;如您发现活动商品售价或促销信息有异常,建议购买前先联系销售商咨询。
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
浏览了该商品的用户还浏览了
加载中,请稍候...
价 格: 到
   
iframe(src='///ns.html?id=GTM-T947SH', height='0', width='0', style='display: visibility:')酷勤网 C 程序员的那点事!
当前位置: >
> 文章列表
神经网络、logistic回归等分类算法简单实现
最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词。看完后有一些自己的小想法,也想做一个玩儿一玩儿。用到的原理是深度学习里的循环神经网络,无奈理论太艰深,只能从头开始...
时间: 21:09
来源: 博客园
1 研发背景 互联网时代也是信息爆炸的时代,内容太多,而用户的时间太少,如何选择成了难题。电商平台里的商品、媒体网站里的新闻、小说网站里的作品、招聘网站里的职位当数量超过用户可以遍历的上限时,用户就无所适从了。 对海量信息进行筛...
时间: 21:22
来源: @InfoQ
Rust 学习笔记(六) ― 比Python和Java更优雅的HashMap
好久没有更新了,昨天用Rust试着写了一个简单的算法题,感觉Rust的HashMap非常的强大,主要是能够优雅的用一个变量来完成Python和Java里面需要用If来进行控制的事情。题目是: Given a pattern and a string str , find if str follows the same pattern. He...
时间: 21:15
来源: 神佑之园
基数排序(Radix Sort): 是一种非比较型的整数排序算法。 基数排序的基本原理是,按照整数的每个位数分组。在分组过程中,对于不足位的数据用0补位。 基数排序按照对位数分组的顺序的不同,可以分为LSD基数排序和MSD基数排序。 LSD基数排序,是按照从低位...
时间: 21:06
来源: 迹忆
在《基数排序(LSD)》这篇文章中,我们对基数排序的概念和效率分析进行了讲解。在这篇文章中我们不再加以赘述。大家可以参考那篇文章,对基数排序的思想进行大概的了解。 下面我们直接来介绍MSD基数排序的步骤。 MSD基数排序是从最高位开始对序列进行分组,...
时间: 21:05
来源: 迹忆
LinkedList的实现源码分析
LinkedList 以双向链表实现。链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作。 按下标访问元素--get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i数组大小的一半,会从末尾移起)。 插入、删除元素时修改前后节点的指针即可...
时间: 20:12
来源: 博客园
常用排序算法
本篇给大家介绍几种软件工程中常用的排序算法 1. 插入排序 插入排序的基本思想就是:每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的序列中,直到全部记录插入完成为止。 对于插入排序的概念以及其原理大家可以参考 《排序算法的学习之路插入...
时间: 19:48
来源: 迹忆
揭秘微信红包:架构、抢红包算法、高并发和降级方案
编者按 与传统意义上的红包相比,近两年火起来的红包,似乎才是如今春节的一大重头戏。历经上千年时代传承与变迁,春节发红包早已成为历史沉淀的文化习俗,融入了民族的血脉。按照各家公布的数据,除夕全天微信用户红包总发送量达到80.8亿个,红包峰值收发量...
时间: 19:59
来源: @InfoQ
言简意赅告诉你KMP算法的原理,不管你信不信,我信了
我们以一个非常简单的例子来开头,举例主串为abababc,模式串为abc,在我们进行匹配的时候第一次匹配的效果为 abababc ababc(在c处产生失配) 按照朴素的匹配算法,我们应该将模模式串向右移1位然后继续匹配,如图下所示情形 a bababc ababc(以次类推,在产生...
时间: 22:32
来源: CSDN博客
机器学习之K-近邻算法
机器学习可分为监督学习和无监督学习。有监督学习就是有具体的分类信息,比如用来判定输入的是输入[a,b,c]中的一类;无监督学习就是不清楚最后的分类情况,也不会给目标值。 K-近邻算法属于一种监督学习分类算法,该方法的思路是:如果一个样本在特征空间中...
时间: 22:18
来源: 博客园

我要回帖

 

随机推荐