当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,