笔记:Head First设计原则和设计模式

本文深入探讨了面向对象设计原则,包括封装变化、针对接口编程、多用组合、开闭原则等,并介绍了策略模式、观察者模式、装饰者模式、工厂模式等多种设计模式。通过实例解析了如何在实际开发中应用这些原则和模式,以提高代码的可维护性和可扩展性。
摘要由CSDN通过智能技术生成

Head First 设计原则和设计模式

原则一:封装变化。找出应用中可能会变化之处,把它独立出来,不要和那些不需要变化的混在一起

封装变化,使其更具有弹性。eg:把鸭子中容易变化的fly()和quack()分别从duck类中独立出来
在这里插入图片描述
哪些因素导致你必须改变你的程序?

  • 我的客户或用户决定他们想要其他一些东西或新功能
  • 我公司决定使用另一个数据库,并且从使用不同数据格式的另一个支持商购买数据
  • 技术改变,所以我们不得不更新我们的代码取使用新的协议
  • 想要重构系统使其更好

原则二:针对接口编程,而不是针对实现编程

利用接口代表每个行为,行为的每个实现都要实现其中一个接口。这样,鸭子就不需要知道行为的具体实现了。
“针对接口编程”真正的意思是针对超类型编程,可以利用多态。多态:声明的变量类型应该时一个超类,通常是一个接口的抽象类,所以分配给这些变量的对象可以是父类的任何具体实现,这意味着类声明他们不需要知道具体对象类型。
在这里插入图片描述

原则三:多用组合,少用继承

“有一个”可能比“是一个”更好

策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

在这里插入图片描述
策略模式
什么时候使用策略模式?

  • 很多相关类仅仅行为不同
  • 你需要一个算法的不同变体
  • 算法使用的数据用户不应该知道(避免暴露内部数据结构)
  • 类定义了许多行为,这些行为在其操作中显示为多个条件语句

什么是设计模式:

  • 记录设计面向对象软件的经验作为设计模式
  • 每个设计模式系统性地命名,解释以及评估一个重要的且重复出现在面向对象系统中的设计
  • 目标是去捕获设计经验,用一种人们可以高效使用的形式
  • 每个模式描述了一个在我们的环境中反复出现的问题,然后描述了这个问题的解决方案的核心,这样您就可以将这个解决方案重复使用一百万次,而不必重复使用相同的方法两次

设计模式的好处:

  • 设计模式为你和其他开发者提供一个共享词汇表
  • 通过让你在模式层面思考,而不是基本对象层面,提升你关于架构的思考

如何使用设计模式?

  • 库和框架
  • DP帮助我们构建的程序更加可维护和可扩展
  • DP首先进入你的大脑

设计模式4元素:

  • 模式名:用一两个词描述一个设计问题,解决方案和结论
  • 问题:描述什么时候取应用模式
  • 解决方案:描述组成设计的元素,元素之间的关系,责任和合作
  • 结论:应用模式的结果和权衡

观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

观察者模式
上图中,具体观察者持有主题的引用,为了在主题那注册成为观察者。
在这里插入图片描述
使用Java的Observable和Observer接口实现观察者模式
WeatherData.java

import java.util.Observable;
import java.util.Observer;
// 不再需要去持有observers,也不需要管理他们的注册和移除,父类Observable会处理他们
public class WeatherData extends Observable{
   
    privatate float temperature;
    privatate float humidity;
    privatate float pressure;

    public WeatherData() {
     // 继承Observable之后不再需要创建保持Observers的数据结构
    }

    public void messurementsChanged() {
   
        setChanged();   // 在通知观察者之前先setChanged()来表明状态已经改变
        notifyObservers();  // 没有传数据对象,说明用的PULL模型
    }

    public void setMeasurements(float temperature, float humidity, float pressure) {
   
        this.temperature = temperature;
        this.humidity = humidity;
        this.pressure = pressure;
        messurementsChanged();
    }

    public float getTemperature() {
   
        return temperature;
    }

    public float getHumidity() {
   
        return humidity;
    }

    public float getPressure() {
   
        return pressure;
    }

}

CurrentConditionsDisplay.java

import java.util.Observable;
import java.util.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Head First 设计模式是一本Java编程的经典教材,许多程序员都采用这本教材来学习设计模式Head First 设计模式主要介绍了23种常用的设计模式,包括单例模式、策略模式、装饰器模式等等。 这本教材使用了大量的图片、漫画、游戏等有趣的元素,让学习过程更加生动形象,使读者更容易理解设计模式的概念和用法。此外,每种设计模式都以一个例子作为案例来说明它的应用场景和解决问题的方法,深入浅出地让读者掌握设计模式的实现过程。 而在CSDN上,关于Head First 设计模式的内容也非常丰富。不仅有这本教材的电子版和学习笔记,还有其他作者写的相关文章和博客,涵盖了从基础概念到实际应用的各个方面。可以说,CSDN是学习Head First 设计模式的一个非常好的平台,为程序员提供了许多宝贵的学习资源和交流平台。 总之,Head First 设计模式是一本经典的Java编程教材,通过CSDN平台,程序员可以更方便地学习和掌握这门技术,提高自己的编程能力和实践经验。 ### 回答2: Head First 设计模式是一本非常优秀的设计模式入门书籍,它以非常生动有趣的方式介绍了二十三种常见的设计模式,包括适配器模式、工厂模式、命令模式等等。每一种模式的介绍都采用了非常形象的图例、实例、故事和练习来帮助读者深入理解模式的概念和应用场景。这种生动的讲解方式让读者更容易理解和应用设计模式,同时也提高了学习的趣味性。 此外,Head First 设计模式还介绍了面向对象的设计原则,例如开闭原则、单一职责原则、依赖倒置原则等等。这些原则是设计模式的基础,对于掌握设计模式非常重要。 最后,这本书还提供了许多练习题和活动来检验读者对设计模式的掌握和应用能力。通过这些练习,读者可以更好地巩固所学知识。 总之,Head First 设计模式是一本非常值得推荐的设计模式入门书籍,它不仅生动有趣,而且深入浅出,让读者在轻松愉悦的氛围中学习设计模式

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值