设计模式学习笔记之职责链模式

今天开始打算将设计模式相关的内容进行一下梳理,同时将一些Demo记录于此。

在开始今天的学习笔记之前,我想先讲这样一个故事:某公司到了一年一度调薪的日子,对于调薪的受理由不同的职位的领导进行处理。部门经理可以直接受理1000以内的调薪,总经理可以直接受理2000以内的调薪,董事长可以受理5000以内的调薪。目前,有三位童鞋申请调薪,他们分别是 Kaisir:3000 , Zhang:5000 , liu:1500 , X-Man:10000,如果使用程序编写,我们该如何处理这种情况呢?

在这种情况下,我们的请求沿着 “部门经理 -> 总经理 -> 董事长” 的顺序依次传递,每一级受理他们权限之内的请求,若超出权限,则继续向上级申请。除了调薪之外,请假,调薪也跟此情景类似,于是对于此种情景,我们可以使用职责链模式进行处理。

任何事物都有正反两面,这个职责链模式的优缺点在哪里呢?
优点:链上的每个节点都是彼此独立的,节点无需知道整个链条的内容,只需要知道他的后继节点即可,这样很大程度降低了类与类之间的耦合关系。此外可以很自由的增加新的处理节点,无需修改之前的节点,符合开放-封闭原则。

缺点:除目标链之外,其他的节点仅仅起到传递的作用,若链过长的话,系统将被传递用的节点占掉很多的资源。

具体事例代码如下:
抽象类 Manager

[java]

package com.kaisir.designpattern.chain;

import com.kaisir.designpattern.chain.model.Request;

/**
* Created with IntelliJ IDEA.
* User: Kaisir
* Date: 13-3-23
* Time: 下午2:32
* To change this template use File | Settings | File Templates.
*/
public abstract class Manager {
private Manager nextchain;

public Manager getNextchain() {
return nextchain;
}

public void setNextchain(Manager nextchain) {
this.nextchain = nextchain;
}

public abstract void doRequest(Request request);
}

[/java]

继续阅读“设计模式学习笔记之职责链模式”

假期随想

貌似有好几天没来更新部落格了,真的发现这开始实习了跟当学生时还真是不太一样,当学生时有着大把大把的时间可以用来做自己想做的事情,可是真的慢慢步入社会,却发现有太多时间不能自已。原来晚上我都把本本带回宿舍,上上网也好,看看电影也好,现在我晚上下班都直接把本本丢在办公室,取而代之的,我都带一本专业书回去。宿舍就剩下我一个人了,回去我也不开房间里的灯,只打开那盏从Shp16那里抢来的台灯,倒上一杯水,慢慢的品读。一人一灯一书一床,大概就是对我宿舍生活的最好写照了,哈哈~~

五一假期学校放9天,而网络中心要值三天班,没想到昨天第一天值班就出了意外,停电没按时间来电,以至于UPS电池几近耗尽,最终造成整个核心机房断电,这一断电不要紧,有三台Server出现了问题,哎,估计到正式上班时间又有的忙了~~

这回五一回家,妈妈送了我一盆仙人掌,哈哈~~放在电脑旁边,有一抹绿色在身边陪着,也挺好玩的~~现在越发的喜欢在公交车上思考问题了,我发现我越来越喜欢春天了,从冬天慢慢过渡到春天,看到到处都是绿色的,心情格外的舒畅,不知怎么的,感觉好像已经好久没有经历春天了呢,可能之前由于心情的原因一直没有心情欣赏窗外的景色吧。

还有一件值的开心的事情是从卓越买的书送到了,哈哈,我现在看不下去电子书了,还是纸质的书捧着有感觉。《大话设计模式》这书有蛮多人给我推荐,不久前我还跑去了新华书店,竟然没的卖,无奈之下只好从卓越上买了~~卓越还真是便宜,比淘宝都便宜~~哈哈 ~不过我还是从淘宝上买了另外一本书,那本书卓越上正版的太贵,影印版只有正版价格的三分之一 哈哈哈~~~

此外,还有一件值的庆祝的事情,那就是,那就是Kaisir我终于开始涉足前台(UI)的制作了,以前这活都是我搭档Shp16来做,哈哈 这回找到一个很好用的CSS+DIV的框架集,叫做“960-Grid-System”哈哈 ~~很好玩的一个框架,用这个搭网页框架简直是享受啊~~~哈哈 大爱CSS+DIV 无爱Table咯~~

C#设计模式 笔记(一)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ani_Sports
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Cat cat = new Cat("Kaisir");
cat.ShoutNum = 100;
MessageBox.Show(cat.Shout());
}

 继续阅读“C#设计模式 笔记(一)”