抽象工厂与建造设计模式结合

初探抽象工厂与建造者模式之间结合
 
     本文适合初学设计模式的人,第一次写文章,别拿拖鞋打我脸,我也是刚学,有什么误区希望大家给我指点一二. 开始看设计模式头有点大,不知道有什么用.建议新人不要懒,看不懂没有关系,多把代码打俩遍.前几天刚刚学习抽象工厂模式,单件模式与建造者模式.看完Terrylee写的设计模式中让我感觉自已的编程是那么弱,大牛就是大牛.

    抽象工厂模式好处
     往往在设计中好移植,可以在数据库的封装提供上方便.类与类之间没有直接的联系,而是渐接的进行联系.
    例如:在自已写的程序中,往往要SQLserver与Oracle之间都能运行.这就用到了抽象工厂模式.


    建造者模式好处
    在设计中有时要创建一个复杂的对象,往往又是由子对象组成的.
    例如:我们把电脑看成一个复杂的对象,电脑里面又有CPU,内存,硬盘,等对象.这样才能组装成电脑.
    在抽象工厂和建造者模式结合时,抽象工厂负责的是我是要组装笔记本,还是台式机.二者可以随意.


    下面举个生活中的例子,炒菜,对于我来说只会吃,丢人中...嘎.

    1.炒菜时我们先要准备好材料才可以进行吧,那么我们建立个抽象类.

   public abstract class abBuilderFood
      {
        /// <summary>
        /// 猪肉
        /// </summary>

        public abstract void pork();
        /// <summary>
        /// 鱼
        /// </summary>

        public abstract void fish();
        /// <summary>
        /// 鸡蛋
        /// </summary>

        public abstract void egg();
        /// <summary>
        /// 西红柿
        /// </summary>

        public abstract void tomato();
        /// <summary>
        /// 土豆
        /// </summary>

        public abstract void murphy();
        public abstract Food GetFood();
      } 


      2.下面建立菜式混合类,也就是把什么菜和什么菜结合.组成一道菜

      public class Food
      {
        ArrayList Food_name = new ArrayList();
        string Food_strname = "";
        public void Add(string strname)
        {
            Food_name.Add(strname); 
        }
        public string show()
        {
            for (int i = 0; i < Food_name.Count; i++)
            {
                Food_strname = Food_strname + Food_name[i] + "|";
            }
            return Food_strname;
        }
      }

      3. 下面要我们要知道都准备了哪些菜,这样子才好什么菜和什么菜进行搭配.继承抽象的菜

       public class BuilderFood : abBuilderFood
      {
                Food Foodname = new Food();
            public override void egg()
           {
                Foodname.Add("鸡蛋");
            }

            public override void fish()
            {
                Foodname.Add("鱼");
             }

            public override void murphy()
            {
                Foodname.Add("土豆");
            }

            public override void pork()
            {
                Foodname.Add("猪肉");
             }

            public override void tomato()
            {
                Foodname.Add("西红柿");
            }

           public override Food GetFood()
           {
               return Foodname;
           }
      }
     
      4.下面就是抽象工厂要完成的工作了,告诉我们今天是吃妈妈做的菜,还是爸爸做的菜.

  public abstract class abstrfactory
     {
          public static abstrfactory instance;

       public static abstrfactory Getinstance()
          {
             string factoryName = System.Configuration.ConfigurationSettings.AppSettings["factoryName"];
              if (instance == null)
      //这里是跟据app.config进行设置的
                  instance = (abstrfactory)Assembly.Load("factory_Builder").CreateInstance(factoryName);
              return instance;
          }
          public abstract void adept(abBuilderFood foodname);
     }


       5.我们就快可以吃到好吃的了,加油吧..下面内容很简单了.就是要知道爸,妈到底会做什么样的菜.

       public class father : abstrfactory
        {
            public override void adept(abBuilderFood foodname)
           {
               //西红柿炒蛋
               foodname.egg();
               foodname.tomato();
           }
         }

         public class mater : abstrfactory
         {
             public override void adept(abBuilderFood foodname)
            {
                //土豆烧肉
                foodname.murphy();
                foodname.pork();
            }
        }

6.下面是App.config配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="factoryName" value="factory_Builder.mater"></add>
  </appSettings>
</configuration>

7.下面是主程序,WindowsApplication程序,在winform下面增加一个Lable.
Form_Load事件中加入如下代码

            abBuilderFood instance = new BuilderFood();
           
            Food myFood = instance.GetFood();
            abstrfactory.Getinstance().adept(instance);
            label1.Text = myFood .show();

文中运用了俩个单件模式,我想是不对的,大家帮忙看看怎么修改.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值