`
jgsj
  • 浏览: 961867 次
文章分类
社区版块
存档分类
最新评论

设计模式笔记01-策略模式

 
阅读更多

设计模式笔记01-入门

1.引言

上周快速地把《Head First设计模式》推到第7章,这周状态不佳,除了写了个工具之外书都没翻,现在连设计模式的名字都记不全了,深感大脑记忆学的快忘的也快。本着好记性不如烂笔头的原则,同时也方便以后自己再来复习回顾的时候不用大篇地再把原书翻一遍,以后每一章都会写一篇博客用来自我总结。

2.正文笔记

2.1继承的缺点

1、代码在多个子类中重复,因为所有子类需要覆盖父类的抽象方法
2、子类运行时不容易改变状态,因为没有setter方法;
3、很难知道所有子类的全部行为;
4、改变牵一发而动全身,造成其他子类不想要的改变。

2.2在软件开发商,有什么是你可以深信不疑的?

需求变更,change!

2.3设计原则

找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
把会变化的部分取出并“封装”起来,好让其他部分不会受到影响。
针对接口编程,而不是针对实现编程。
父类为抽象类,方法为接口,接口与实现分离。
多用组合(一个接口多个实现类),少用集成。

2.4 最终的抽象duck父类

public abstract class duck
{
    FlyBehavior flybehavior;
    QuackBehavior quackbehavior;
    public duck()
    {
        
    }

    public void abstract display();
    
    public void performFly()
    {
        flybehavior.fly();
    }

    public void performQuack()
    {
        quackbehavior.quack();
    }

    public void swim()
    {
        System.out.println("All ducks float, even decoys.");
    }
}

从上述定义类中可以总结出的设计经验有:
1、父类设计为抽象类,其中的抽象方法必须被子类实现;
2、父类中有三种方法:抽象方法、父类已定义的方法(swim)、实现可变的方法(performFly和performQuack);
3、纯粹的继承只是为了引入多态,何为纯粹,就是只包含抽象方法和父类已定义的方法,如果performFly和performQuack也定义为抽象方法则会造成子类的代码冗余;
4、这里针对接口编程的目的非常明显,duck拥有不同的fly和quack方式,分别用两个接口来定义,再分别通过一组实现类来定义具体的实现方式,子类集成duck类时只要选择具体的某一个实现类即可,且即使发生需求变更,也只需要修改特定的实现类,而不用修改所有子类定义。

复习一下抽象的几个概念:
1、抽象方法abstract,父类的抽象方法主要作用为占位,由子类来实现;
2、为了提高清晰度,包含一个或多个抽象方法的类本身必须声明为抽象类;
3、类即使不包含抽象方法,也可以声明为抽象类;
4、抽象类不能被实例化。

2.5动态设定行为

public void setFlyBehavior(FlyBehavior fb)
{
    flybehavior = fb;
}

public void setQuackBehavior(QuackBehavior qb)
{
    quackbehavior = qb;
}

加上setter方法后,就可以动态的改变子类的具体行为。

2.6策略模式定义

策略模式,定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计模式也可以把你的思考架构的层次提高到模式层面,而不是仅停留在琐碎的对象上。
比如购物网站的结算模式,对于不同的级别的客户折扣不一样,这时候就可以对结算使用组合方法,定义为一个接口和多个实现。

3本章结语

我们全都使用别人设计好的库与框架。我们讨论库与框架、利用他们的API编译成我们的程序、享受运用别人的代码所带来的优点。看看java api它所带来的功能:网络、GUI、IO等。库与框架长久以来,一直扮演着软件开发过程的重要角色,我们从中挑选所要的组件,把他们放进合适的地方。但是,库与框架无法帮助我们将应用组织成容易了解、容易维护、具有弹性的架构,所以要设计模式。
设计模式不会直接进入你的代码中,而是先进入你的“大脑”中。一旦你先在脑海中装入了许多关于模式的知识,就能够开始新设计中采用它们,并当你的旧代码变得如同搅和成一团没有弹性的意大利面一样时,可以用它们重做旧代码。








分享到:
评论

相关推荐

    HeadFirst 设计模式学习笔记1--策略模式Demo

    http://blog.csdn.net/laszloyu/archive/2010/05/11/5579765.aspx 示例代码

    《深入浅出设计模式》读书笔记--策略模式与三个设计原则

    NULL 博文链接:https://bosshida.iteye.com/blog/1165049

    《Head First设计模式》读书笔记 -- (第一章)策略模式

    NULL 博文链接:https://never-say-never.iteye.com/blog/851923

    尚硅谷设计模式源码笔记课件.zip

    行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...

    设计模式笔记(包含所有设计模式)个人总结提炼笔记

    3. 行为型模式:行为型模式关注对象之间的通信和协作,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式可以帮助...

    javascript设计模式之策略模式学习笔记.docx

    javascript设计模式之策略模式学习笔记.docx

    设计模式经典样例笔记与代码Swift.zip

    设计模式经典样例笔记与代码Swift.zip 基础 [x] 类间的关系 [x] 设计原则 创建型 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定...

    设计模式学习笔记

    工厂模式,策略模式,装饰模式,代理模式,工厂方法模式,原型模式等23个设计模式

    javascript设计模式之策略模式学习笔记

    主要介绍了javascript设计模式之策略模式学习笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    JAVA23种设计模式及快捷记忆

    设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。工厂模式、抽象工厂模式、...

    设计模式之策略模式

    策略模式目录 前言 策略模式介绍 策略模式的实现 ... 其实我也是作为设计模式的初学者,写上这篇博客,就当是一篇笔记,如果有写的不对的地方,有可以请教一下。  话不多说了(^-^) 2.策略模式的介绍  策略模

    java-design-patterns:Java 设计模式学习笔记

    Java Design PatternsJava 设计模式学习笔记,简单易懂,每个模式都有相应的代码示列,帮助学习理解。在线阅读地址:设计原则创建型模式作用:将创建与使用代码解耦结构型模式作用:将不同的功能代码解耦桥接模式...

    javascript 设计模式与开发实践

    javascript 设计模式与开发实践 作者 曾探 本书字体清晰,学习起来舒服。和张容铭的javascript设计模式相比,个人觉得有以下不同之处: 1、需要对原型链和闭包有一定的基础 2、案例比较经典并且通熟易懂,讲解特别...

    Java面向对象程序设计笔记

    策略模式: 16 模板模式: 16 组合设计模式: 16 9. 多态 16 10. 内部类 17 第五章 Java集合对象 18 1.List 18 2.Set 18 3.Map 19 第六章 常用的API类 21 1.对文件进行操作的类 21 2.对String...

    java版中国象棋源码-hello-design-pattern:设计模式学习笔记

    设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不依赖细节,细节依赖抽象。...

    apuntes-javascript-avanzado:Javascript 笔记 II - 高级

    如何更好地构建 JS 代码(设计和代码模式) 如何测试你的 js 代码(单元测试) 本书中涵盖的概念将使您的 JS 代码面向对象、经过测试、可扩展、更易于理解和更有条理。 内容 本资料涵盖以下内容: 书 如果您想以 ...

    高级软件架构设计实践笔记

    软件架构设计整理笔记 1 第一章 软件架构概念的分类 第二章 架构对新产品的作用 第三章 架构师职责 第四章 项目经理与构架师的分工与协作 第五章 架构设计为开发人员解决什么问题 第六章 开发过程 第七章 软件的质量...

Global site tag (gtag.js) - Google Analytics