华域联盟 .Net asp.net 组合模式的一个例子

asp.net 组合模式的一个例子

复制代码 代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Test

{

class Program

{

static void Main(string[] args)

{

var customer = new Customer

{

IsActive = true,

LateFees = 100M,

TotalRentNumber = 10

};

Console.WriteLine(customer.CanRent());

Console.ReadKey();

}

}

public interface ISpecification<T>

{

/// <summary>

/// 是否可以租赁

/// </summary>

bool IsSatisfiedBy(T entity);

/// <summary>

/// 与操作

/// </summary>

ISpecification<T> And(ISpecification<T> other);

/// <summary>

/// 否操作

/// </summary>

ISpecification<T> Not();

}

/// <summary>

/// 基类

/// </summary>

public abstract class CompositeSpecification<T> : ISpecification<T>

{

public abstract bool IsSatisfiedBy(T candidate);

public ISpecification<T> And(ISpecification<T> other)

{

return new AndSpecification<T>(this, other);

}

public ISpecification<T> Not()

{

return new NotSpecification<T>(this);

}

}

/// <summary>

/// 与操作

/// </summary>

public class AndSpecification<T> : CompositeSpecification<T>

{

private ISpecification<T> leftSpecification;

private ISpecification<T> rightSpecification;

public AndSpecification(ISpecification<T> leftSpecification, ISpecification<T> rightSpecification)

{

this.leftSpecification = leftSpecification;

this.rightSpecification = rightSpecification;

}

public override bool IsSatisfiedBy(T entity)

{

return leftSpecification.IsSatisfiedBy(entity) && rightSpecification.IsSatisfiedBy(entity);

}

}

///<summary>

///否操作

/// </summary>

public class NotSpecification<T> : CompositeSpecification<T>

{

private ISpecification<T> innerSpecification;

public NotSpecification(ISpecification<T> innerSpecification)

{

this.innerSpecification = innerSpecification;

}

public override bool IsSatisfiedBy(T entity)

{

return !innerSpecification.IsSatisfiedBy(entity);

}

}

/// <summary>

/// 是否达到最大的规定租赁数

/// </summary>

public class HasReachedMaxSpecification : CompositeSpecification<Customer>

{

public override bool IsSatisfiedBy(Customer entity)

{

return entity.TotalRentNumber > 5;

}

}

/// <summary>

/// 是否激活

/// </summary>

public class CustomerActiveSpecification : CompositeSpecification<Customer>

{

public override bool IsSatisfiedBy(Customer entity)

{

return entity.IsActive;

}

}

/// <summary>

/// 是否欠费

/// </summary>

public class CustomerHasLateFeesSpecification : CompositeSpecification<Customer>

{

public override bool IsSatisfiedBy(Customer entity)

{

return entity.LateFees > 0;

}

}

public class Customer

{

private ISpecification<Customer> hasReachedRentalThreshold;

private ISpecification<Customer> customerIsActive;

private ISpecification<Customer> customerHasLateFees;

public Customer()

{

hasReachedRentalThreshold = new HasReachedMaxSpecification();

customerIsActive = new CustomerActiveSpecification();

customerHasLateFees = new CustomerHasLateFeesSpecification();

}

/// <summary>

/// 用户租赁DVD数量

/// </summary>

public int TotalRentNumber

{

get;

set;

}

/// <summary>

/// 账户是否激活

/// </summary>

public bool IsActive

{

get;

set;

}

/// <summary>

/// 用户之前是否还欠费

/// </summary>

public decimal LateFees

{

get;

set;

}

public bool CanRent()

{

ISpecification<Customer> canRent = customerIsActive.And(hasReachedRentalThreshold.Not()).And(customerHasLateFees.Not());

return canRent.IsSatisfiedBy(this);

}

}

}
您可能感兴趣的文章:

  • Android源码学习之组合模式定义及应用
  • JavaScript 设计模式之组合模式解析
  • php设计模式 Composite (组合模式)
  • C++设计模式之组合模式
  • c# 组合模式
  • Java设计模式之组合模式(Composite模式)介绍
  • C#组合模式实例详解
  • Python的组合模式与责任链模式编程示例
  • iOS应用开发中运用设计模式中的组合模式的实例解析
  • java设计模式之组合模式(Composite)

本文由 华域联盟 原创撰写:华域联盟 » asp.net 组合模式的一个例子

转载请保留出处和原文链接:https://www.cnhackhy.com/44528.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部