文档章节

模板方法设计模式与策略模式

o
 onedotdot
发布于 2017/08/17 18:55
字数 588
阅读 19
收藏 0

 一、Java继承

缺点:

1、耦合性太强,容易破坏封装性,比如空实现之类的;

2、不好多继承;

3、为了扩展会多重继承,导致代码复杂不好维护;也不知道动态扩展

优点

1、继承无需创建父类的对象;

2、一般用于抽象方法的继承和实现,比如模板方法设计模式;

 

二、Java继承优点的利用——模板方法设计模式

1、SpringFramework里面的声明式事务处理;

有一个接口 PlatformTransactionManager,里面有三个抽象方法;

getTransaction();commit();rollback();

有一个抽象类,AbstractPlatformTransactionManager,实现上面的接口;

里面的commit和rollback基本流程都已经实现,只有getTransacton()方法没有实现;调用的是dogetTransacton()抽象方法;

有多个实现子类DataSourceTransactionManager、HibernateTransactionManager等,继承上面的抽象类;

他们里面有自己对上面抽象方法dogetTransacton()的实现;

 

2、自定义类加载器的实现;(委托机制)

自定义类加载器,一般要继承ClassLoader,然后它里面有loadClass方法,但是这个方法的流程是委托机制的流程,我们不用管他,只需要把findClass方法给覆盖就可以了;这个方法主要就是把文件给传进来而已;

 

 

3、面试题:聊聊对类,抽象类,接口的理解;

另外看《代理模式》那篇文章里面谈这三者的关系;

 

三、Java继承缺点的补偿——策略模式(组合)

如果前提条件一样,那么优先使用对象组合而不是类继承

 

参考;

https://my.oschina.net/u/3377232/blog/1518635

https://my.oschina.net/u/3377232/blog/1518632

 

 

四、集继承和组合与一身的一种设计模式——适配器(Adapt)模式

适配器模式也是一种包装模式

适配器模式不适合在详细设计阶段使用它,它是一种补偿模式,专用来在系统后期扩展、修改时所用。

https://my.oschina.net/u/3377232/blog/1518617

当接口发生改变之后,没法正常调用接口,那就用适配器做一个转换了;比如中国电器用美国的电路肯定是不行的,所以需要自带一个适配器去做一个转换;然后才能用美国的电给中国买的电器充电;

 

© 著作权归作者所有

共有 人打赏支持
o
粉丝 7
博文 352
码字总数 14350
作品 0
朝阳
java设计模式-- 单例模式

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

爱学习的逃课君
2014/11/27
0
0
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
0
0
JavaScript 中常见设计模式整理

开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式。本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知。 JavaScript 中...

牧云云
05/18
0
0
设计模式知识汇总(附github分享)

写在前面 主要内容 为了更系统的学习设计模式,特地开了这样一个基于Java的设计模式【集中营】,都是笔者在实际工作中用到过或者学习过的一些设计模式的一些提炼或者总检。慢慢地初见规模,也...

landy8530
10/10
0
0
代理模式(Proxy Pattern):动态代理 - 最易懂的设计模式解析

前言 今天我来全面总结开发中最常用的设计模式 - 代理模式中的动态代理模式 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(Sim...

Carson_Ho
04/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
4
0
现场看路演了!

HiBlock
昨天
8
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
7
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
8
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部