这篇文章是我自己从学习开始学习设计模式的开始。从接触java这个语言大约快有一年了,对于面向对象的语言来说它的特性只要是多态、继承、封装等,但是对于没有真正去做过项目开发的准程序员来说,这些只是一个概念,我们也许只是知道java语言或者说是面向对象的语言有这些特性,但是来说什么时候用到这些特性,这些特性又能给我们的程序带来什么样的好处(待回答)。设计模式是前人总结出的编程经验也可以说是软件工程的思想应用到了实际的编码上,虽然现在有些程序员反对设计模式,他们的观点是在写程序时套用别人总结的模式或者说是自己去研究一种新的模式会很死板很浪费时间。但是对于初学java或者说是面向对象的编程语言的准程序员来说,学习设计模式是巩固语言的好方法。
在学习设计模式之前我们先要去了解一下java语言的内存管理机制和java语言的内存泄漏问题,关于java的内存管理的文章我以转过和写过,稍后会再写有关内存泄漏的问题。关于参考资料有一本比较好的书《head frist 设计模式 》,这本书写的比较有趣,同时还适合对语言不是特别熟的人,有机会的可以好好品品。
我们来说说设计模式中的第一个模式:策略模式。策略模式的原则是:少用继承,多用组合;有一个比是一个要好的多。在软件开发的过程有一个重要的环节是需求分析,现在需求分析已经上升到需求工程(别人的观点,我不太清楚),大部分我们开发的软件都是由客户提出需求我们给他们开发,这样在需求获取的过程中客户可能会时不时改变的他们的需求,软件的功能要改变,为了避免这种情况的出现,前人们总结了策略模式,让软件具有可扩展性,客户想要实现什么的功能我们给预留接口即可实现。并不是策略模式适合所有的情况,学习策略模式只是让我们了解软件设计过程中怎么来考虑软件的变化导致我们代码更改的复杂性,更甚者是软件做好不符合客户的需求或者说客户想再添加功能可能会是我们编写的软件从头到尾改个遍等等一系列的问题。策略模式的设计过程中就要求我们要考虑到有哪些部分会发生改变。
我们进入正题,现在我们有一个任务就是在控制台模式一个有各种各样的鸭子的游戏,首先要求鸭子具有颜色、会游泳、会飞、会叫等特征。首先我们要在要求中提取出有哪些类,这个类有哪些的属性和行为。开始我们先认为有一个鸭子类,这个鸭子具有color属性,游泳、飞、叫都可以认为是行为。好了,这个游戏的版本一:
public class Duck {
String color;
public Duck(String color) {
this.color = color;
}
public void swim() {
//鸭子在游泳
}
public void quck() {
//鸭子在呱呱叫
}
public void fly() {
//鸭子在飞
}
}
class RedDuck extends Duck { //红头鸭子
public RedDuck(String color) {
super(color);
// TODO Auto-generated constructor stub
}
}
class MallardDuck extends Duck {
public MallardDuck(String color) {
super(color);
// TODO Auto-generated constructor stub
}
}
这个代码基本上实现了“软件”的要求,我们有两种鸭子,一种红头鸭子和一种绿头鸭子,它们都会飞、游泳和叫等。但是客户说不对我要求的游戏要在复杂点,现在客户提出我要能实现鸭子的颜色的改变和添加另外一种橡皮鸭子()要求可能还会变,橡皮鸭子只会游泳、会叫但不会飞。这时“软件”就发生了更改,有这个更改我们可以得出哪些地方还会在改动,应该如何应对这些改动。下篇继续。。。。