设计模式inC#系列[2] Abstract Factory 抽象工厂

来源:互联网 发布:scar处女座数据 编辑:程序博客网 时间:2024/06/06 08:36
Abstract Factory 抽象工厂
Client                      :调用抽象工厂
MailFactory            :包含了具体的工厂类
 - MailMailFactory :具体的工厂类1 - MailMail:具体工厂类生成的具体实例1
 - ClanInvitationFactory: 具体的工厂类2 - ClanInvitation:具体工厂类生成的具体实例

MailMail 和ClanInvitation均继承Mail

决定使用哪一个具体的工厂类就决定了将要生成什么类。

using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactory
{
   
class Program
   
{
      
static void Main(string[] args)
      
{
         MailFactory factory 
= MailFactory.GetMailFactory(MailType.Mail);

         Mail newMail 
= factory.CreateMail();
      }

   }


   
abstract class MailFactory
   
{
      
public static MailFactory GetMailFactory(MailType type)
      
{
         
if (type == MailType.Mail)
         
{
            
return new MailMailFactory();
         }

         
else
         
{
            
return new ClanInvitationFactory();
         }

      }


      
public abstract Mail CreateMail();
   }


   
class MailMailFactory : MailFactory
   
{
      
public override Mail CreateMail()
      
{
         
return new MailMail();         
      }

   }


   
class ClanInvitationFactory : MailFactory
   
{
      
public override Mail CreateMail()
      
{
         
return new ClanInvitation();
      }

   }


   
class Mail
   
{
      
public string MailID;
   }


   
class MailMail : Mail
   
{
   }


   
class ClanInvitation : Mail
   
{
   }


   
enum MailType
   
{
      Mail, ClanInvitation
   }

}