zoukankan      html  css  js  c++  java
  • 设计模式 行为型模式

    1. 观察者模式

    • 意图
      描述了 一种 一对多的关系。 当某一对象的状态发生改变时,其他对象会得到 改变的通知。并作出相应的反应。


    • 类型
      推模式:当有新的消息时,把消息以参数的形式传递给每个观察者
      拉模式:消息的提取必须由观察者自行完成
    • 实例
      using System;
      using System.Collections.Generic;
      using System.Text;
      
      namespace Delegate {
          // 热水器
          public class Heater {
             private int temperature;
             public delegate void BoilHandler(int param);    //声明委托
             public event BoilHandler BoilEvent;          //声明事件
      
             // 烧水
             public void BoilWater() {
                 for (int i = 0; i <= 100; i++) {
                    temperature = i;
      
                    if (temperature > 95) {
                        if (BoilEvent != null) { //如果有对象注册
                            BoilEvent(temperature);  //调用所有注册对象的方法
                        }
                    }
                 }
             }
          }
      
          // 警报器
          public class Alarm {
             public void MakeAlert(int param) {
                 Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:", param);
             }
          }
      
          // 显示器
          public class Display {
             public static void ShowMsg(int param) { //静态方法
                 Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", param);
             }
          }
          
          class Program {
             static void Main() {
                 Heater heater = new Heater();
                 Alarm alarm = new Alarm();
      
                 heater.BoilEvent += alarm.MakeAlert;    //注册方法
                 heater.BoilEvent += (new Alarm()).MakeAlert;   //给匿名对象注册方法
                 heater.BoilEvent += Display.ShowMsg;       //注册静态方法
      
                 heater.BoilWater();   //烧水,会自动调用注册过对象的方法
             }
          }
      }
      输出为:
      Alarm:嘀嘀嘀,水已经 96 度了:
      Alarm:嘀嘀嘀,水已经 96 度了:
      Display:水快烧开了,当前温度:96度。
      // 省略...
      
    • 详见
      http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html

    2. 策略模式

  • 相关阅读:
    C 获取编译日期函数
    C# HttpWebRequest 使用,一个Http分析Demo
    C# 字节序调整
    char/wchar_t之间的互转MultiByteToWideChar和WideCharToMultiByte的用法
    前导声明代替头文件依赖和交叉包含
    MFC network address control使用
    [收藏]POSIX标准
    带引用计数的智能指针
    C# string byte[] 转换
    DIV随鼠标滚动
  • 原文地址:https://www.cnblogs.com/raysbo/p/2943542.html
Copyright © 2011-2022 走看看