设计模式学习笔记

从事Java开发从2006年7月至今也有近4年时间了,这几年学过的与接触过的东东是很多了,但是现在感觉好像什么都懂又好像什么都不懂,是应该好好静下心来沉淀一些东西,坚持每周写一到两篇博客,就从设计模式开始吧

学习资料与书籍
1.Java与模式 作者:[u]阎宏博士[/u]
2.HeadFirst设计模式 作者:[u]Eric Freeman[/u], [u]Elisabeth Freeman[/u], [u]With Kathy ierra[/u], [u]Bert Bates [/u]
3.大话设计模式 作者:[u]陈杰[/u]
4.网络上的一些技术文章

面向对象的编程,并不是类越多越好,类的划分是为了封转,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。

编程是一门技术,更加是一门艺术

[b]1. 单一职责原则[/b]
软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。如果一个类承担的职责过多,就等于把这些职责耦合在一起,这种耦合会导致脆弱的设计,当变化发生时设计会遭受到意向不到的破坏。

编程时,要在类的职责分离上多思考,做到单一职责,这样的代码才是真正的易维护、易扩展、易复用、灵活多样。

[b]2.开放封闭原则[/b]
对扩展开放,对修改关闭。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。

开闭原则是面向对象设计的核心所在,遵循这个原则才能带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。

[b]3.依赖倒转原则[/b]
PC由于易插拔的方式,不管哪一个部件出问题,都可以在不影响其他部件的前提下进行修改或替换,PC电脑叫易插拔,面向对象叫强内聚,松耦合。
抽象不应该依赖细节,细节应该依赖于抽象,就是说要针对接口编程,不要对实现编程

[b]4.里氏代换原则[/b]
里氏代换原则是Barbara Liskov 女士在1988年发表的。
在软件里面,把父类都替换成它的子类,程序的行为没有变化。简单的说,子类型必须能够替换掉它们的父类型。

[b]5.简单工厂模式(Simple Factory)[/b]
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说去除了与具体实现的依赖。

[b]6.抽象工厂模式(Abstract Factory)[/b]
抽象工厂模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,抽象工厂模式保持了简单工厂模式封转对象创建过程的优点,克服了简单工厂违背开闭原则的缺点。

一个最常见的应用场景数据库访问DAO

interface UserDAO{
insert(User user);
updateByUserId(User user);
selectByUserId(int userId);
}
interface ItemDAO{
...
}
interface DAOFactory{
getUserDAO();
getItemDAO();
}

MySQLDAOFactory //MySQL数据库存储实现
OracleDAOFactory //Oracle数据库存储实现
XMLDAOFactory //XML文件存储实现

当然现在这些都可以交给Spring IOC容器来完成了

[b]7.策略模式(Strategy)[/b]
策略模式是一种定义一系列算法的方法,从概念上来看所有这些算法完成的都是相同的工作,只是具体实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用者类之间的耦合。

常见的应用场景有:商场收银软件、电子商务网的折扣处理

[b]8.装饰模式(decorator)[/b]
动态的给一个对象添加一些额外的职责,就增加功能来说装饰模式比生成子类更为灵活。

在有些应用场景下需要很多功能的各种组合,如果说这些功能的组合是通过继承方式来实现的话,那么每一种组合都需要一个类,这样就会出现大量的重复性代码,而类数目也成“爆炸性”。而如果采用装饰模式,那么不仅类的数目大大减少了,重复的代码也可以减至到最少。

[b]9.适配器模式(adapter)[/b]
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能工作的那个类可以一起工作。在日常生活中有很多适配器模式的例子:如电源适配器、网络适配器等。

只有在软件开发后期或维护期间,又或者在无法改变原有设计和代码时才考虑使用适配器模式,如果是有小的接口不统一时应当及时重构避免问题扩大化。事后控制不如事中控制,事中控制不如事前控制。

Java I/O库就是decorator与adapter模式的典型应用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值