23种设计模式深度解读

第一种:Adapter设计模式

Adapter设计模式

这一设计模式存在的必要性:为利用已有代码而存在。已有的代码能够提供相似的功能,但是接口不满足需求,这个时候就采用“适应器设计模式”,这样的好处在于不必因为修改原有代码而增加测试的时间,只要测试Adapter就可以,不用测试adaptee。

代码复用的理念上有区别,对已有代码“封装”而不是“修改”。

这一设计模式拥有2中实现方法,一种是采用将Target设计成接口,一种是将Target设计成类。前者采用继承adaptee并实现Target的策略;后者采用继承Target并且拥有adaptee的模式。前者称为“类适配器模式”,后者称为“对象适配器模式”,本质上是一种委托。

直接功效:填补具有不同API的两个雷之间的缝隙。


第二种:Factory Method 设计模式

这一设计模式存在的必要性:框架的复用提供了可能,不需要修改“框架”,只变换“具体加工”就可以实现“抽象算法”的多次复用。


第三种:模板设计模式

实际上工厂设计模式的一部分,主要作用是实现“流程”和“具体处理”的解耦。组成模板的方法被定义在父类中,这些方法是抽象的,所以只查看父类的代码是无法知道这些方法会进行什么样的操作的。

模板模式的角色只有:抽象类和具体类。具体类继承抽象类,实现抽象类中的抽象方法。使用时要将生成的子类的实例保存在父类的变量中,这样的好处是什么?即使没有用instanceof等指定子类的种类,程序也能正常工作。无论在父类类型的变量中保存哪个子类的实例,程序都可以正常工作,这种原则被称为“里氏替换原则”


第四种:迭代器设计模式

迭代器模式是什么?

答:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。


迭代器模式用在什么地方?

方便地遍历某个集合,不必知道集合内部结构。


迭代器的核心思想是什么?


迭代器模式应用的场景和意义:访问你个聚合对象的内容二无需暴露它的内部表示,支持对聚合对象的多种遍历,

为遍历不同的聚合结构提供一个统一的接口。


为什么要使用迭代器?


直接使用已经实现的方法遍历集合中的元素。


迭代器的接口与类之间的关系是什么?


(1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:取得下一个元素的方法

next(),判断是否遍历结束的方法hasNext()),移出当前对象的方法remove(),



(2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代。


(3)容器角色(Aggregate):  一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,

List接口,Set接口等


(4)具体容器角色(ConcreteAggregate):就是抽象容器的具体实现类,比如List接口的

有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。



重点需要掌握的知识: Iterator模式的类图; 模式中的角色 4大角色 


喜欢只使用具体的类来解决问题不是一个好习惯,这样造成代码的复用率很差,一旦一个类进行了修改,其他的类就必须做出修改

一个好的解决方案是引入接口和抽象类。他们的出现可以有效弱化类之间的耦合。


设计模式的作用就是帮助我们编写可以复用的类 。

举个例子:





你可能感兴趣的:(Java编程)