首页 > 代码库 > 《Head First 设计模式》学习笔记——策略模型
《Head First 设计模式》学习笔记——策略模型
我们全都使用别人设计好的库与框架。我们讨论库与框架、利用他们的API编译成我们的程序、享受运用别人的代码所带来的优点。看看java api它所带来的功能:网络、GUI、IO等。库与框架长久以来,一直扮演着软件开发过程的重要角色,我们从中挑选所要的组件,把他们放进合适的地方。但是,库与框架无法帮助我们将应用组织成容易了解、容易维护、具有弹性的架构,所以要设计模式。
设计模式不会直接进入你的代码中,而是先进入你的“大脑”中。一旦你先在脑海中装入了许多关于模式的知识,就能够开始新设计中采用它们,并当你的旧代码变得如同搅和成一团没有弹性的意大利面一样时,可以用它们重做旧代码。————题记
面向对象的设计原则
(1)找出应用中可能需要变化之处,把它们独立出来,不要和那些变化的代码混在一起。————封装变化
也即把变化的部分取出来并封装起来,以便以后可以轻而易举地改动或者扩充此部分,而不影响不需要变化的其他部分。
(2)针对接口编程,而非针对实现编程————
“针对接口编程”,关键在于多态。利用多态,程序可以针对超类型编程,执行时会根据实际状况执行到真正的行为,不会被绑死在超类型的行为上。“针对超类型编程”这句话可以更明确的说成是变量的声明类应该是超类型,通常是一个抽象类或者一个接口,如此,只要是具体实现此超类型的类所产生的对象,都可以指定给这个变量。也就意味着,声明类时不用理会以后执行时的真正对象类型。
(3)多用组合,少用继承。
通过组合建立系统具有很大的弹性,不仅可将算法族封装成类,还可以“在运行时动态改变行为”,只要组合的行为对象符合正确的接口标准即可。
继承的缺点:
1、代码在多个子类中重复,因为所有子类需要覆盖父类的抽象方法;
2、子类运行时不容易改变状态,因为没有setter方法;
3、很难知道所有子类的全部行为;
4、改变牵一发而动全身,造成其他子类不想要的改变。
要点
知道OO基础,并不足以让你设计出良好的OO系统。
良好的OO设计必须具备可复用、可扩充、可维护三个特性。
模式不是代码,而是针对设计问题的通用解决方案。
设计模式
(1)策略模型:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
复习一下抽象的几个概念:
1、抽象方法abstract,父类的抽象方法主要作用为占位,由子类来实现;
2、为了提高清晰度,包含一个或多个抽象方法的类本身必须声明为抽象类;
3、类即使不包含抽象方法,也可以声明为抽象类;
4、抽象类不能被实例化。
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."); } //设定动态行为 public void setFlyBehavior(FlyBehavior fb) { flybehavior = fb; } public void setQuackBehavior(QuackBehavior qb) { quackbehavior = qb; } } public interface Flybehavior { public void fly(); } public interface Quackbehavior { public void quack(); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。