asp.net 組合模式的PHP代碼
複製代碼 代碼如下:
using System;
using ric;
using ;
using ;
namespace Test
{
class Program
{
static void Main(string[] args)
{
var customer = new Customer
{
IsActive = true,
LateFees = 100M,
TotalRentNumber = 10
};
eLine(ent());
Key();
}
}
public interface ISpecification
{
///
/// 是否可以租賃
///
bool IsSatisfiedBy(T entity);
///
/// 與操作
///
ISpecificationAnd(ISpecificationother);
///
/// 否操作
///
ISpecificationNot();
}
///
/// 基類
///
public abstract class CompositeSpecification: ISpecification
{
public abstract bool IsSatisfiedBy(T candidate);
public ISpecificationAnd(ISpecificationother)
{
return new AndSpecification(this, other);
}
public ISpecificationNot()
{
return new NotSpecification(this);
}
}
///
/// 與操作
///
public class AndSpecification: CompositeSpecification
{
private ISpecificationleftSpecification;
private ISpecificationrightSpecification;
public AndSpecification(ISpecificationleftSpecification, ISpecificationrightSpecification)
{
Specification = leftSpecification;
tSpecification = rightSpecification;
}
public override bool IsSatisfiedBy(T entity)
{
return tisfiedBy(entity) && tisfiedBy(entity);
}
}
///
///否操作
///
public class NotSpecification: CompositeSpecification
{
private ISpecificationinnerSpecification;
public NotSpecification(ISpecificationinnerSpecification)
{
rSpecification = innerSpecification;
}
public override bool IsSatisfiedBy(T entity)
{
return !tisfiedBy(entity);
}
}
///
/// 是否達到最大的規定租賃數
///
public class HasReachedMaxSpecification : CompositeSpecification
{
public override bool IsSatisfiedBy(Customer entity)
{
return lRentNumber > 5;
}
}
///
/// 是否激活
///
public class CustomerActiveSpecification : CompositeSpecification
{
public override bool IsSatisfiedBy(Customer entity)
{
return tive;
}
}
///
/// 是否欠費
///
public class CustomerHasLateFeesSpecification : CompositeSpecification
{
public override bool IsSatisfiedBy(Customer entity)
{
return Fees > 0;
}
}
public class Customer
{
private ISpecificationhasReachedRentalThreshold;
private ISpecificationcustomerIsActive;
private ISpecificationcustomerHasLateFees;
public Customer()
{
hasReachedRentalThreshold = new HasReachedMaxSpecification();
customerIsActive = new CustomerActiveSpecification();
customerHasLateFees = new CustomerHasLateFeesSpecification();
}
///
/// 用户租賃DVD數量
///
public int TotalRentNumber
{
get;
set;
}
///
/// 賬户是否激活
///
public bool IsActive
{
get;
set;
}
///
/// 用户之前是否還欠費
///
public decimal LateFees
{
get;
set;
}
public bool CanRent()
{
ISpecificationcanRent = (())(());
return tisfiedBy(this);
}
}
}
-
JavaScript 函數表達式
JavaScript中創建函數主要有兩種方法:函數聲明和函數表達式。這兩種方式都有不同的適用場景。這篇筆記主要關注的是函數表達式的幾大特點以及它的使用場景,下面一一描述。主要特點可選的函數名稱函數名稱是函數聲明的必需組成部分,這個函數名稱相當於一個變量,新定...
-
jQuery中的read和JavaScript中的onload函數的區別在哪
在JavaScript中,onload函數是最經常使用的,幾乎涉及到JavaScript的童鞋都少不了要接觸它。這個函數的作用就是等待網頁完全裝載完了以後再去執行代碼塊內的語句,因為按照文檔流的執行順序,通常用於頭部加載JavaScript的`時候需要用到。複製代碼代碼如下:ad=functio...
-
javascript包裝對象的用法
js對象是一種複合值:它是屬性或已命名值得集合。參考以下代碼:vars="helloworld";varlen=th;在該例子中,s是字符串,而字符串不是對象,但為何會有屬性呢?其實只要引用了字符串s的屬性,js就會將字符串通過調用newString(s)的方式轉換為對象,該對象繼承了字符串的方法,並被...
-
javascript中的return和閉包函數
複製代碼代碼如下:functionmakefunc(x){returnfunction(){returnx;}}alert(makefunc(0));其實不是不執行,只是朋友的意思這裏alert出來的`應該是“0”,而不是function(){returnx;}。不是腳本寫錯了,只是沒搞懂return,從當前函數退出,並從那個函數返回一個值。如果返...