现在的位置: 首页 > 综合 > 正文

一小时学会几种设计模式

2013年08月20日 ⁄ 综合 ⁄ 共 3186字 ⁄ 字号 评论关闭

设计模式很多种,如果看理论,是能理解了,但离使用还很远。现在有几个实例代码,整理了一下,1小时搞定。
NET常用设计模式——工厂模式

工厂模式

  • 存在一个创建对象的工厂
  • 调用者从中取得特别的对象
  • 由工厂决定如何符合调用需求
  • 客户不知道对象如何生成

 
应用示列(一)

using System;

namespace CSDesingPattern
{
    
public enum UserType { Employee = 0, Sales = 1, Guest = 2 }

    public class User
    {
        
protected string mPermissionLevel = "Z";
        
public string GetPermissionLevel()
        {
            
return mPermissionLevel;
        }
    }

    public class Employee : User
    {
        
public Employee()
        {
            mPermissionLevel 
= "A";
        }
    }
    
    
public class Sales : User
    {
        
public Sales()
        {
            mPermissionLevel 
= "B";
        }
    }
   
    
public class Guest : User
    {
        
public Guest()
        {
            mPermissionLevel 
= "C";
        }
    }

    //工厂类
    public class FactoryCreater
    {
        
public FactoryCreater() { }

        public static User CreateUser(UserType userType)
        {
            User u;
            
switch (userType)
            {
                
case UserType.Employee:
                    u 
= new Employee();
                    
break;
                
case UserType.Sales:
                    u 
= new Sales();
                    
break;
                
case UserType.Guest:
                    u 
= new Guest();
                    
break;
                
default:
                    u 
= new User();
                    
break;
            };
            
return u;
        }

        static void Main(string[] args)
        {
            Console.WriteLine(
"请输入使用者类型{0,1,2}");
            UserType t 
= (UserType)int.Parse(Console.ReadLine());
            User newUser 
= FactoryCreater.CreateUser(t);
            Console.WriteLine(
"建立了{0}对象", newUser.ToString());
            Console.WriteLine(
"权限等级={0}", newUser.GetPermissionLevel());
        }
    }
}

应用示例(二)

using System;

namespace NameFactory
{

    //名字工厂类
    public class NameFactory
    {
        
public NameFactory() { }

        public Namer getName(string name)
        {
            
int i = name.IndexOf(",");
            
if (i > 0)
                
return new LastFirst(name);
            
else
                
return new FirstFirst(name);
        }
    }

    
    public class Namer
    {
        
//parts stored here
        protected string frName, lName;

        //return first name
        public string getFrname()
        {
            
return frName;
        }
        
//return last name
        public string getLname()
        {
            
return lName;
        }
    }

    public class FirstFirst : Namer
    {
        
public FirstFirst(string name)
        {
            
int i = name.IndexOf(" ");
            
if (i > 0)
            {
                frName 
= name.Substring(0, i).Trim();
                lName 
= name.Substring(i + 1).Trim();
            }
            
else
            {
                lName 
= name;
                frName 
= "";
            }
        }
    }

    public class LastFirst : Namer
    {
        
public LastFirst(string name)
        {
            
int i = name.IndexOf(",");
            
if (i > 0)
            {
                lName 
= name.Substring(0, i);
                frName 
= name.Substring(i + 1).Trim();
            }
            
else
            {
                lName 
= name;
                frName 
= "";
            }
        }
    }

}

抱歉!评论已关闭.