码迷,mamicode.com
首页 > 其他好文 > 详细

1 工厂方法模式(Factory Method)和 2 抽象工厂模式(Abstract Factory)

时间:2015-05-07 18:21:14      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

简单工厂

public class SendFactory {  
    public Sender produce(String type) {  
        if ("mail".equals(type)) {  
            return new MailSender();  
        } else if ("sms".equals(type)) {  
           return new SmsSender();  
        } else {  
            System.out.println("请输入正确的类型!");  
            return null;  
        }  
   }  
}  

 

public class SendFactory {      
   public Sender produceMail(){  
       return new MailSender();  
    }  
      
    public Sender produceSms(){  
       return new SmsSender();  
   }  
}

 

public class SendFactory {  
   public static Sender produceMail(){  
        return new MailSender();  
  }  
      
   public static Sender produceSms(){  
      return new SmsSender();  
  }  
}

 工厂方法:

    public enum type
    {
        SMS, Mail
    }
    public abstract class sender
    {
        public static string[] typeArray = new string[] { "SMS", "Mail" };
        public type t;
        public string senderName;
    }

    class Mail : sender
    {
        public Mail()
        {
            this.senderName = "张飞";
            this.t = type.Mail;
        }
    }

    //抽象类
    abstract class SendOneMessage
    {
        abstract protected sender CreateSender(type t);
        public void send(type t)
        {
            sender s = CreateSender(t);
            if( s != null){
                Console.Write(s.senderName + "发送一条" + sender.typeArray[(int)t] + "消息");
            }
            else{
                 Console.Write("wrong");
            }
        }
    }

    /// <summary>
    /// 工厂方法(通过继承实现)
    /// </summary>
    class SendOneMail : SendOneMessage
    {
        public SendOneMail()
        {
        }
        protected override sender CreateSender(type t)
        {
            if (t == type.Mail)
            {
                return new Mail();
            }
            else
            {
                return null;
            }
        }
    }
        static int Main()//string[] args
        {
            SendOneMessage a = new SendOneMessage();
            a.send(type.Mail);

            Console.ReadLine();
            return 0;
        }

 

 抽象工厂:

 public abstract class weapon
    {
        public string Name;
        public void Description()
        {
            Console.Write("我是一把" + this.Name + "\n");
        }
    }

    class Sword1 : weapon
    {
        public Sword1()
        {
            this.Name = "波刃剑";
        }
    }
    class Axe1 : weapon
    {
        public Axe1()
        {
            this.Name = "手斧";
        }
    }
    class Sword2 : weapon
    {
        public Sword2()
        {
            this.Name = "极光剑";
        }
    }
    class Axe2 : weapon
    {
        public Axe2()
        {
            this.Name = "水晶流星";
        }
    }

    //抽象工厂
    interface Factory
    {
         weapon CreateSword();
         weapon CreateAxe();
    }
    class weapon1 : Factory
    {
        public weapon CreateSword()
        {
            return new Sword1();
        }
        public weapon CreateAxe()
        {
            return new Axe1();
        }
    }
    class weapon2 : Factory
    {
        public weapon CreateSword()
        {
            return new Sword2();
        }
        public weapon CreateAxe()
        {
            return new Axe2();
        }
    }
        static int Main()//string[] args
        {
            weapon1 w1 = new weapon1();
            weapon2 w2 = new weapon2();
            w1.CreateSword().Description();
            w1.CreateAxe().Description();
            w2.CreateSword().Description();
            w2.CreateAxe().Description();

            Console.ReadLine();
            return 0;
        }

 

抽象工厂 + 工厂方法

public abstract class equip
    {
        public string Name;
        public void Description()
        {
            Console.Write("我是一把/件" + this.Name + "\n");
        }
    }

    class Sword1 : equip
    {
        public Sword1()
        {
            this.Name = "波刃剑";
        }
    }
    class Axe1 : equip
    {
        public Axe1()
        {
            this.Name = "手斧";
        }
    }
    class Sword2 : equip
    {
        public Sword2()
        {
            this.Name = "极光剑";
        }
    }
    class Axe2 : equip
    {
        public Axe2()
        {
            this.Name = "水晶流星";
        }
    }
    class armour1 : equip
    {
        public armour1()
        {
            this.Name = "皮铠";
        }
    }
    class armour2 : equip
    {
        public armour2()
        {
            this.Name = "白金铠";
        }
    }
    class gaiter1 : equip
    {
        public gaiter1()
        {
            this.Name = "皮护腿";
        }
    }
    class gaiter2 : equip
    {
        public gaiter2()
        {
            this.Name = "白金护腿";
        }
    }

    //抽象工厂
    interface Factory
    {
        equip CreateSword(string type);
        equip CreateArmour(string type);
    }
    class equip1 : Factory
    {
        public equip CreateSword(string type)
        {
            if (type == "Sword")
            {
                return new Sword1();
            }
            else
            {
                return new Axe1();
            }
        }
        public equip CreateArmour(string type)
        {
            if (type == "armour")
            {
                return new armour1();
            }
            else
            {
                return new gaiter1();
            }
        }
    }
    class equip2 : Factory
    {
        public equip CreateSword(string type)
        {
            if (type == "Sword")
            {
                return new Sword2();
            }
            else
            {
                return new Axe2();
            }
        }
        public equip CreateArmour(string type)
        {
            if (type == "armour")
            {
                return new armour2();
            }
            else
            {
                return new gaiter2();
            }
        }
    }


     static int Main()//string[] args
        {
            equip1 e1 = new equip1();
            equip2 e2 = new equip2();
            e1.CreateSword("Sword").Description();
            e1.CreateSword("Axe").Description();
            e1.CreateArmour("armour").Description();
            e1.CreateArmour("gaiter").Description();
            e2.CreateSword("Sword").Description();
            e2.CreateSword("Axe").Description();
            e2.CreateArmour("armour").Description();
            e2.CreateArmour("gaiter").Description();

            Console.ReadLine();
            return 0;
        }

 

1 工厂方法模式(Factory Method)和 2 抽象工厂模式(Abstract Factory)

标签:

原文地址:http://www.cnblogs.com/wj033/p/4485499.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!