读书笔记—Head First 设计模式— 策略模式
这几天买了本新书叫Head First设计模式。感觉还不错,可以看的进去,这就开个博客整理一下书里的内容。
稍微介绍一下这本书,我还没有看完,按照我的理解这本书主要讲的是关于类的设计,它没有按照一般教材书那样中规中矩的展现知识,而是用一种引导的方式慢慢的让你理解它的知识。好处是当你刚开始学的时候,会很方便给你理解,但是到你重复学习的时候,可能就会有一丝厌烦了。关于书的信息就介绍到这里,让我来进入正题。
策略模式
策略模式——定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
正如上面所写的,策略模式其实是一个我们很常用的模式,也许我说多态性你们会更容易懂。它的本质就是利用多态性,将各种算法封装成一个个单独的类,并拥有共同的父类。主类通过包含此父类达到让主类的子类能够自由改变自己的行为,也就是让算法的变化独立于使用算法的客户。
不多说了,上代码。
abstract class Tyre {
abstract void run();
}
class Rockettyre extends Tyre {
@Override
void run() {
// TODO Auto-generated method stub
System.out.println("jiu~ jiu~ jiu~");
}
}
class Simpletyre extends Tyre {
@Override
void run() {
// TODO Auto-generated method stub
System.out.println("gulu gulu gulu");
}
}
abstract class Car{
Tyre tyre;
// Window window;
// Color color;
// ....
void carrunning() {
tire.run();
}
}
class MyCar extends Car{
MyCar(){
this.tyre = new Rockettyre();
}
}
class YourCar extends Car {
YourCar(){
this.tyre = new Simpletyre();
}
}
public class Strategy {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car = new MyCar();
car.carrunning();
car = new YourCar();
car.carrunning();
}
}
如上所示,我设计了一个车抽象类和一个轮胎抽象类,车类中包含了轮胎类父类,在车类的子类中通过实例化轮胎的子类,实现轮胎多态化,将算法的变化独立于算法的客户。这样做的好处第一点是在后期的修改,变化时,可以最小范围的修改,使得代码的弹性增强。第二点是,方便整理代码,代码结构显而易见。
附上类图一份。
总结一下:
策划模式是我们极为常见的模式之一,灵活运用多态思维,封装算法族。