Head First_设计模式_学习笔记_第01章_策略模式
第一次用这书来学习设计模式,还真是超正点,无意中学会了第一个设计模式——策略模式。本次学习,我决定用最笨的方法,上机实践,逐个代码敲,用C++,C#,java三种语言来将它书上的UML图用代码实现。具体也不多说啦。这次的笔记就以笔记的形式记录吧,也不用过多的说明啦,书本上写得太好啦。
首先呢,是从简单的模拟鸭子应用做起:
P002_C++代码实现:
[cpp]
/**
* 项目名称:P002Duck.cpp
* 文件说明: 实现《Head Frist 设计模式》P2书本UML图的代码。
* 完成简单的模拟Duck应用。
* 程序说明:本程序共含三个类:
* Duck作为基类,定义quack(), swim(), display() 基本方法。
* MallardDuck派生Duck,重写display()方法。
* RedheadDuck派生Duck,重写display()方法。
* 开发环境:Microsoft Visual Studio 2010
* 开发语言:C++
* 文件作者:Neicole
* 联系方式:http://blog.csdn.net/neicole
* 联系方式:http://neicole.blog.51cto.com/
* 制作日期:2012.09.17
**/
#include <iostream>
using std::cout;
#include "Duck.h"
#include "MallardDuck.h"
#include "RedheadDuck.h"
/************************** 主函数 ****************************/
int main()
{
// Duck, MallardDuck, RedheadDuck
// construct
Duck * duck[3] = {0, 0, 0};
duck[0] = new Duck();
duck[1] = new MallardDuck();
duck[2] = new RedheadDuck();
// show
for(int i = 0; i < 3; ++i){
if(0 == i){ cout << "Hello, I'm class Duck:\n"; }
else if(1 == i){ cout << "\nHello, I'm class MallardDuck:\n";}
else if(2 == i){ cout << "\nHello, I'm class RedHeadDuck:\n";}
duck[i] -> quack();
duck[i] -> swim();
duck[i] -> display();
}
// destroy
for(int i = 0; i < 3; ++i){
delete duck[i];
}
cout << "\n测试已完成,"; system("pause");
return 0;
}
/************** 运行结果 *************
Hello, I'm class Duck:
Duck: 我是一只会呱呱叫的鸭
Duck: 我是一只会游泳的鸭
Duck: 我是一只普通样子的鸭
Hello, I'm class MallardDuck:
Duck: 我是一只会呱呱叫的鸭
Duck: 我是一只会游泳的鸭
MallardDuck: 我是一只绿色头的鸭
Hello, I'm class RedHeadDuck:
Duck: 我是一只会呱呱叫的鸭
Duck: 我是一只会游泳的鸭
RedheadDuck: 我是一只红头鸭
测试已完成,请按任意键继续. . .
************** 以上 *************/
[cpp]
// Duck.h
/************************* Duck类 ******************************/
#ifndef __DUCK__
#define __DUCK__
class Duck
{
public:
Duck(){}
virtual ~Duck(){}
void quack(){ // 呱呱叫
cout << "Duck: 我是一只会呱呱叫的鸭\n";
}
void swim(){ // 游泳
cout << "Duck: 我是一只会游泳的鸭\n";
}
virtual void display(){ // 鸭子的样子
cout << "Duck: 我是一只普通样子的鸭\n";
}
};
#endif // __DUCK__
[cpp]
// MallardDuck.h
/******************** MallardDuck类 ****************************/
#ifndef __MALLARDDUCK__
#define __MALLARDDUCK__
class Duck;
class MallardDuck: public Duck
{
public:
MallardDuck():Duck(){} // 外观是绿头的一种鸭
virtual ~MallardDuck(){}
virtual void display(){
cout << "MallardDuck: 我是一只绿色头的鸭\n";
}
};
#endif // __MALLARDDUCK__
[cpp]
// RedheadDuck.h
/******************** RedheadDuck类 ****************************/
#ifndef __REDHEADDUCK__
#define __REDHEADDUCK__
class Duck;
class RedheadDuck: public Duck
{
public:
RedheadDuck():Duck(){} // 外观是红头的一种鸭
virtual ~RedheadDuck(){}
virtual void display(){
cout << "RedheadDuck: 我是一只红头鸭\n";
}
};
#endif // __REDHEADDUCK__
P002_C#代码实现:
[csharp] v
/**
* 项目名称:P002Duck
* 文件说明: 实现《Head Frist 设计模式》P2书本UML图的代码。
* 完成简单的模拟Duck应用。
* 程序说明:本程序共含三个类:
* Duck作为基类,定义quack(), swim(), display() 基本方法。
* MallardDuck派生Duck,重写display()方法。
* RedheadDuck派生Duck,重写display()方法。
* 开发环境:Microsoft Visual Studio 2010
* 开发语言:C#
* 文件作者:Neicole
* 联系方式:http://blog.csdn.net/neicole
* 联系方式:http://neicole.blog.51cto.com/
* 制作日期:2012.09.17
**/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace P002Duck
{
class Program
{
static void Main(string[] args)
{
// Duck, MallardDuck, RedheadDuck
// construct
Duck [] duck = {new Duck(), new MallardDuck(), new RedheadDuck()};
// show&nbs
补充:软件开发 , C++ ,