using System;
using System.Collections.Generic;
using System.Text;
namespace StateExample
{
class Program
{
static void Main(string[] args)
{
User user = new User("zhuye");
user.BuyBook(2000);
user.BuyBook(2000);
user.BuyBook(2000);
user.BuyBook(2000);
}
}
class User
{
private UserLevel userLevel;
public UserLevel UserLevel
{
get { return userLevel; }
set { userLevel = value; }
}
private string userName;
private double paidMoney;
public double PaidMoney
{
get { return paidMoney; }
}
public User(string userName)
{
this.userName = userName;
this.paidMoney = 0;
this.UserLevel = new NormalUser(this);
}
public void BuyBook(double amount)
{
Console.WriteLine(string.Format("Hello {0}, You have paid ${1}, You Level is {2}.", userName, paidMoney, userLevel.GetType().Name));
double realamount = userLevel.CalcRealAmount(amount);
Console.WriteLine("You only paid $" + realamount + " for this book.");
paidMoney += realamount;
userLevel.StateCheck();
}
}
abstract class UserLevel
{
protected User user;
public UserLevel(User user)
{
this.user = user;
}
public abstract void StateCheck();
public abstract double CalcRealAmount(double amount);
}
class DiamondUser : UserLevel
{
public DiamondUser(User user)
: base(user) { }
public override double CalcRealAmount(double amount)
{
return amount * 0.7;
}
public override void StateCheck()
{
}
}
class GoldUser : UserLevel
{
public GoldUser(User user)
: base(user) { }
public override double CalcRealAmount(double amount)
{
return amount * 0.8;
}
public override void StateCheck()
{
if (user.PaidMoney > 5000)
user.UserLevel = new DiamondUser(user);
}
}
class SilverUser : UserLevel
{
public SilverUser(User user)
: base(user) { }
public override double CalcRealAmount(double amount)
{
return amount * 0.9;
}
public override void StateCheck()
{
if (user.PaidMoney > 2000)
user.UserLevel = new GoldUser(user);
}
}
class NormalUser : UserLevel
{
public NormalUser(User user)
: base(user) { }
public override double CalcRealAmount(double amount)
{
return amount * 0.95;
}
public override void StateCheck()
{
if (user.PaidMoney > 1000)
user.UserLevel = new SilverUser(user);
}
}
}
|
相关推荐
无废话C#设计模式整理版。
无废话C#设计模式系列文章 http://www.cnblogs.com/lovecherry/archive/2007/10/17/927728.html
无废话C#设计模式 软件设计模式 .net开发
设计模式的原则? l 单一职责:你不希望因为电脑内存损坏而更换CPU吧,同样也不应该让一个类有多种修改的理由。 l 对扩展开放,对修改封闭:你一定不希望电脑只有一个内存槽,加内存就要换主板吧,程序也应该能在...
摘要:电子书籍,C#教程,设计模式 设计模式:基于C#的工程化实现及扩展 pdf全书下载,本书作者以C#重新实现了GOF的模式,同时加入了新近的设计想法,如SOA与Web Services.....等,同时还有相对于其他设计模式而言较新...
本书主要介绍如何用最常见的设计模式编写C#程序。全书分为四个部分,首先介绍了C#语言和面向对象程序设计的一般原则,可作为C#程序设计的快速入门教程;然后分别讲述了创建型模式、结构型模式和行为型模式。每一类...
完整的C#设计模式PDF版 C#设计模式(1) 4 一、 C# 面向对象程序设计复习 5 二、 设计模式举例 5 三、 先有鸡还是先有蛋? 7 四、 大瓶子套小瓶子还是小瓶子套大瓶子? 8 五、 .net本质 9 C#设计模式(2) 11 一、 ...
C#设计模式PDF 电子书 2005年04版
新版设计模式手册 - C#设计模式(第二版)
某位高人撰写的C#演示设计模式的系列文章,本人觉得不错,有意者请下载。
C#设计模式,入门到提高的好文章和例子
C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式 C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式 C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式 C#面向对象设计...
C#设计模式(1) 一、 C# 面向对象程序设计复习 二、 设计模式举例 三、 先有鸡还是先有蛋? 四、 大瓶子套小瓶子还是小瓶子套大瓶子? 五、 .net本质 C#设计模式(2) 一、 "开放-封闭"原则(OCP) 二、 ...
本资料来源于吕震宇博客,欢迎访问 ...经过整理,方便大家阅读。内容包括: 设计模式(22)-Strategy Pattern ...C#设计模式(3) - 设计原则(2) C#设计模式(2) - 设计原则(1) C#设计模式(1) - 面向对象基本概念复习
C#设计模式-整理收藏(吕震宇 设计模式速成经典示例)
c#设计模式 行为型模式 包括8个设计模式的实验报告+源代码。实验报告包括实验类图和个人总结的一些小技巧,源代码。包括:职责链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略...
C#面向对象设计模式纵横谈(25):设计模式总结
C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式
创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6.... 状态模式(State Pattern)