设计模式入门--自己的理解

1.重载
方法名一样,参数不一样。比如不同的构造方法
2.封装
对象,其实就是一个类,把它自己的成员和方法在自己的类里面实现,自己搞自己的,不依赖别人,同时提供对外的接口
3.继承
子类继承父类,如果一些类有很多共同的代码,可以抽象出来搞一个父类,然后子类来继承,一个类只能继承一个父类。
4.多态
父类的一个方法为虚方法,内部没有具体实现,子类继承过来后,自己去实现,也就是说,方法名一样,但是不同的子类做的事情是不一样的。
5.重构
简单的说就是代码太乱,或者重复的太多,使之结构化,或者把相同的放到父类中去。
6.抽象类
其实也是多态,抽象方法没有方法体,就是说没有{}。子类继承过来后自己去实现,现在搞多态,就是将父类搞成抽象类。
7.接口
声明接口和声明抽象类完全一样,但不许提供接口中任何成员的执行方法。一个类可以实现多个接口。
8.集合与泛型
List Set Map 就是集合。在new的时候,比如List s =new List(),那么这个指定类型的声明就是泛型。
9.简单工厂模式
我们需要实例化很多的类,那么我们就搞一个类来专门实例化,这就是工厂,即搞一个类来专门批量的做同一个事情。不符合开放-封闭原则,因为每次扩展都要更改工厂类。
10.策略模式
封装算法,一个抽象的算法基类,具体策略继承它,自己实现自己的行为,还有一个专门实例化的类,参数就是具体的策略类。
11.单一职责
一个类而言,应该仅有一个引起它变化的原因。在类中,发现职责,并将其分离,一个类,不需要有太多的功能。
12.开放–封闭
软件实体(类,函数,模块)对扩展是开放的,对更改是封闭的。面对需求的改变可以使软件保持相对稳定,就是说不影响原来的。在开发下一个版本的时候,上一个版本用户要正常使用。
13.依赖倒转
高层模块不应该依赖低层模块,两个都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。针对接口编程,不要对实现编程。所有的依赖都终止于抽象或者接口,这就是面向对象。在编程的时候,行为分离,多搞些抽象和接口用来继承。这样的话,易扩展,易维护,还灵活。
14.装饰模式
把类中的装饰功能给搬移出去,动态的增加新的功能。把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。
15.代理模式
为其他对象提供一种代理,以控制对这个对象的访问。一个里面有另外一个的实例,可以调用另外一个的方法。
16.工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法让一个类的实例化延迟到子类。
17.原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。简单的说就是我new了一个对象,但是我现在需要很多这个对象,那就令新的对象=之前的创建的对象就行了,相当于是复制。浅拷贝:被复制的对象所有的变量都和原来的对象相同的值。深拷贝:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。
18.模板方法模式
把不变的行为搬移到超类中去,去除子类中的重复代码来体现它的优势。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。提供一个很好的代码复用平台。
19.迪米特法则
让两个类之间尽量耦合弱,这样利于复用,一个类被修改了,不会对有关系的类造成波及。如果需要调用另一个类的方法的话,可以通过第三者转发这个调用。
20.外观模式
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。层与层分离,减少依赖。修改子系统不影响用户,因为外观没变,外观就是一个接口,连接子系统与客户的桥梁。
21.建造者模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。用户只需要制定建造的类型,不需要知道细节。跟编程很类似,很多类或者方法都是封装好的,我们只需要自己调用就行了,至于内部细节代码我们是不知道的。是在创建复制对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
22.观察者模式
一对多的依赖关系,多个观察者对象同时监听某一个被观察者对象,被观察者发生变化时,会通知所有的观察者对象,使它们可以自动更新自己。其实就是解除耦合,其实也满足了依赖倒转,双方都依赖抽象,不依赖具体。Observer对象是观察者,Observable对象是被观察者。(1)创建被观察者类,它继承自java.util.Observable类。(2)创建观察者类,它实现java.util.Observer接口。(3)被观察者类。addObserver()把观察者对象添加到观察者对象列表中,当被观察事件发生时,setChange():用来设置一个内部标志位注明数据发生了变化。notifyObservers():调用观察者对象列表中所有的Observer的updata()方法,通知它们数据发生了变化。只有在setChange()被调用后,notifyObservers()才会去调用updata()。(4)观察者类,实现void update(Observable o,Object arg)
23.抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
24.状态模式
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
25.适配器模式
将一个类的接口转换成用户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作那些类可以一起工作。想使用一个已经存在的类,但如果他的接口,就是方法和你的要求不一样的时候,就可以考虑使用适配器模式。两个类所做的事情相同或者相似,但是具有不同的接口要使用它。
26.备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保持的状态。比较适用于功能比较复杂的,但是需要维护或者记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,可以根据保存的信息还原到前一状态。
27.组合模式
将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。当你发现需求是体现部分与整体层次结构时,以及希望用户可忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了。
28.迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。当你对聚集有多种方式遍历时,可以考虑用迭代器模式。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器来负责,这样既可以做到不暴露集合的内部结构,又可以让外部代码透明的访问集合内部的数据。
29.单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。因为实例化是需要占用内存空间的,这样的单例模式使得代码清晰,内存占用少。
30.桥接模式
将抽象部分与它的实现部分分离,使它们都可以独立的变化。比如我现在要画画,如果用蜡笔,我需要12种不同的颜色以及大中小号,于是我需要36只蜡笔,那么我就要创建36个类,如果我使用的是毛笔,我需要大中小号3只毛笔,再配上12种颜料,我只需要创建3+12=15个类。
31.命令模式
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。把请求一个操作的对象与知道怎么执行一个操作的对象分割开。
32.职责链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
33.中介者模式
用一个中介对象来封装一系列的对象交互。中介者使对象不需要显示地相互引用,从而使其耦合松散,从而可以独立地改变它们之间的交互。
34.享元模式
运用共享技术有效的支持大量细粒度的对象。
35.解释器模式
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。如果一种特定的发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
36.访问者模式
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。目的是要把处理从数据结构分离出来。有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值