2011年4月15日 星期五

裝飾者模式

動態的將責任附加到對象上 想要擴展功能 裝飾者提供有別於繼承的另一種選擇

設計原則 : 對擴展開放 對修改關閉

例子:java.io and 星巴克咖啡 有許多咖啡 以及裝飾 的調味 如:奶泡 豆漿 牛奶等...

觀察者模式

定義對象之間一對多依賴 , 當一個對象改變狀態時 , 所有的依賴者 都會收到通知並自動更新

相關例子: 報社 與 訂閱者  或者是 按鈕的監聽事件

設計原則: 為了交互對象之間的松耦合設計而努力

設計模式 策略模式

定義算法族  分別封裝起來 讓他們之間可以互相替換  此方法讓算法的變化獨立於使用算法的客戶
 
設計原則 : 找出應用中 可能有變化的地方 把它獨立出來 , 不要和那些不需要變化的東西 放在一起

設計原則 : 針對接口編程 而不針對實現編程

例子 鴨子類別 針對 飛行 和 叫聲 作Interface 的處理


封裝變化

多用組合 少用繼承

針對接口編程 而不針對實現編程

2011年3月9日 星期三

C# ArrayList 方法 Remove 小心被騙

假設我有一個陣列String[] = new String[]{"1","2","3","1"};我想要移除 "1"先把陣列轉成ArrayList 然後 使用 remove 此方法後 意外發現 他只刪除第一個 "1" 在索引4的 "1" 並沒有被刪除所以下次使用 remove方法 時候 注意 不要被騙了

範例 不使用remove


ArrayList ary = new ArrayList();
String SaNo = "12,3,4,66,1223,4,12334,56";
String[] SaNoArr = SaNo.Split(',');
if (Array.IndexOf(SaNoArr, "4") > -1)
{
for (int i = 0; i < SaNoArr.Length; i++) { ary.Add(SaNoArr[i]); } for (int i = 0; i < ary.Count; i++) { if (ary[i].ToString().Equals("4")) ary.RemoveAt(i); } SaNoArr = (String[])ary.ToArray(typeof(String)); for (int i = 0; i < SaNoArr.Length; i++) { Response.Write(SaNoArr[i]+","); } }

最後印出 12,3,66,1223,12334,56, 才是正確

2011年1月19日 星期三

PHP 防止Sql Injection 基本方法



function SqlInjection_Protect()
{
if( !get_magic_quotes_gpc() )
{
if( is_array($_GET) )
{
while( list($k, $v) = each($_GET) )
{
if( is_array($_GET[$k]) )
{
while( list($k2, $v2) = each($_GET[$k]) )
{
$_GET[$k][$k2] = addslashes($v2);
}
@reset($_GET[$k]);
}
else
{
$_GET[$k] = addslashes($v);
}
}
@reset($_GET);
}
if( is_array($_POST) )
{
while( list($k, $v) = each($_POST) )
{
if( is_array($_POST[$k]) )
{
while( list($k2, $v2) = each($_POST[$k]) )
{
$_POST[$k][$k2] = addslashes($v2);
}
@reset($_POST[$k]);
}
else
{
$_POST[$k] = addslashes($v);
}
}
@reset($_POST);
}

if( is_array($_COOKIE) )
{
while( list($k, $v) = each($_COOKIE) )
{
if( is_array($_COOKIE[$k]) )
{
while( list($k2, $v2) = each($_COOKIE[$k]) )
{
$_COOKIE[$k][$k2] = addslashes($v2);
}
@reset($_COOKIE[$k]);
}
else
{
$_COOKIE[$k] = addslashes($v);
}
}
@reset($_COOKIE);
}
}
}
function SqlInjection_Protect1($content){
//if $content is an array
if (is_array($content))
{
foreach ($content as $key=>$value)
{
$content[$key] = mysql_escape_string($value);
}
}
else
{
//if $content is not an array
$content = mysql_escape_string($content);
}
return $content;
}

2011年1月12日 星期三

PHP list


//取出陣列元素 照順序
$my_array = array("Dog","Cat","Horse");
list($a, $b, $c) = $my_array;
echo "I have several animals, a $a, a $b and a $c.
";
list($a,,$c) = $my_array;
echo "I have several animals, a $a, a $b and a $c.";

2011年1月6日 星期四

C# Cookie Domain


//刪除mycook
HttpCookie aCookie;
string cookieName;
cookieName = "MyCook";
aCookie = new HttpCookie(cookieName);
aCookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(aCookie);

//新增mycook
HttpCookie cookie = new HttpCookie("MyCook");
DateTime dt=DateTime.Now;
TimeSpan ts = new TimeSpan(0,1,0,0,0);
cookie.Expires = dt.Add(ts);
cookie.Values.Add("userid1","123123");
cookie.Domain = ".easytravel.com.tw";
Response.Cookies.Add(cookie);
Response.AppendCookie(cookie);

//印出mycook
HttpCookie cokie = new HttpCookie("MyCook");//初使化
if (Request.Cookies["MyCook"] != null)
{
Response.Write(Request.Cookies["MyCook"]["userid1"]);
}