惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - AlanPaoPao

23)Visitor 22)Template 21)Strategy 20)State 19)Observer 18)Memento 17)Mediator 16)Iterator 15)Interpreter 14)Command 12)Proxy 11)Flyweight 10)Facade 09)Decorator 08)Composite 07)Bridge 06)Adapter 05)Prototype 04)Factory Method
13)Chain Of Responsibility
AlanPaoPao · 2007-09-21 · via 博客园 - AlanPaoPao

    责任链模式的目的是: 为每个对象确定一个职责,并减少每个对象的职责
    实例代码:

class Project
{
  
private int number;     //项目编号
  private double amount;  //预算
  private string purpose; //说明
  public Project(int number, double amount, string purpose)
  
{
    
this.number = number;
    
this.amount = amount;
    
this.purpose = purpose;
  }

  
public double Amount
  
{
    
get return amount; }
    
set { amount = value; }
  }

  
public string Purpose
  
{
    
get return purpose; }
    
set { purpose = value; }
  }

  
public int Number
  
{
    
get return number; }
    
set { number = value; }
  }

}

abstract class Approver
{
  
protected string name;
  
protected double confine;
  
protected Approver successor;
  
protected Approver(string name,double confine)
  
{
    
this.name = name;
    
this.confine = confine;
  }

  
public void SetSuccessor(Approver successor)
  
{
    
this.successor = successor;
  }

  
public abstract void ProcessRequest(Project project);
}

class Director : Approver
{
  
public Director(string name, double confine)
    :
base(name,confine)
  

  }

  
public override void ProcessRequest(Project project)
  
{
    
if (project.Amount < this.confine)
    
{
      Console.WriteLine(
"{0} 批准了# {1}号项目"this.name, project.Number);
    }

    
else if (successor != null)
    
{
      successor.ProcessRequest(project);
    }

    
else
    
{
      Console.WriteLine(
"{0} 无法批准# {1}号项目"this.name, project.Number);
    }

  }

}

class MainApp
{
  
static void Main()
  
{
    Approver director1 
= new Director("director1", 100F);
    Approver director2 
= new Director("director2", 1000F);
    Approver director3 
= new Director("director3", 5000F);
    director1.SetSuccessor(director2);
    director2.SetSuccessor(director3);
    Project p 
= new Project(1008350.00"技术支持");
    director1.ProcessRequest(p);
    p 
= new Project(20083500.10"采购***");
    director1.ProcessRequest(p);
    p 
= new Project(300820000.50"大型系统采购");
    director1.ProcessRequest(p);
    Console.Read();
  }

}