zoukankan      html  css  js  c++  java
  • 初识C#设计模式

         利用设计模式可以使我们的代码更灵活,更容易扩展,更容易维护。各种面向对象的程序设计语言都提供了基本相同的机制:比如类、继承、派生、多态等等。但是又有各自的特色,C# 中的反射机制便是一个很重要的工具,好好地利用就可以在实际中发挥很大的作用。

      我们来看一个例子:

          我的程序中有需要一系列的对象,比如apple,orange…, 要想利用他们,我们就必须在程序中根据用户要求,然后一个个调用 new 操作符来生成他们,这样客户程序就要知道相应的类的信息,生成的代码显然不够灵活。我们可以在代码中不利用具体的类,而只是说明我们需要什么,然后就能够得到我们想要的对象吗?

      我们都看设计模式,很多人都在那里鼓吹他们是如何如何的棒,我们看看怎么样利用他们来解决问题。目标明确了,那我们看看哪个能够符合我们的要求。《设计模式》似懂非懂的看了一些,那我们看看能够不能够“凑”上去呢?嗯,我们的程序考虑的是对象怎么创建的,创建型模式应该符合要求吧。然后我们浏览一下各模式的“意图”部分。第一个好像就撞到彩了,抽象工厂,我们看看吧,“提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类”,至少“无需指定它们具体的类”符合我们的要求。来看看它的结构吧:


          我们的问题好像用不到这么复杂吧,只有orange,apple等等(应该就是product了),他们显然是一类的,都是fruit,我们只要一个生产水果的工厂就可以,左边的继承层次不要,只有一个FruitFactroy看看行不,先别管它正统不正统,实用就行。

      下面的一些东西显然是我们需要的:

    Public interface IFruit
    {
    }
    
    public class Orange:IFruit
    {
     public Orange()
     {
      Console.WriteLine("An orange is got!");
     }
    }
    
    public class Apple:IFruit
    {
     public Apple()
     {
      Console.WriteLine("An apple is got!");
     }
    }
    
          我们的FruitFactory应该是怎么样呢?上面的结构图中它给的是CreateProductA,那好,我就MakeOrange,还有一个CreateProductB,我MakeOrange还不行??

    public class FruitFactory
    {
     public Orange MakeOrange()
     {
      return new Orange();
     }
     public Apple MakeApple()
     {
      return new Apple();
     }
    }
    怎么使用这个工厂呢?我们来写下面的代码:
    string FruitName = Console.ReadLine();
    IFruit MyFruit = null;
    FruitFactory MyFruitFactory = new FruitFactory();
    
    switch (FruitName)
    {
     case "Orange":
      MyFruit = MyFruitFactory.MakeOrange();
      break;
     case "Apple":
      MyFruit = MyFruitFactory.MakeApple();
      break;
     default:
      break;
    }

          编译运行,然后在控制台输入想要的东西,呵呵,成功了。沉浸在幸福中的你得意忘形了吧。

                                                                                                               ——部分材料整理于网络文章

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    SQLSERVER 远程登录18456错误
    谁用掉了我的数据库空间?
    Zabbix-微信报警
    Mailx安装与使用
    Redis-集群操作
    Redis-集群部署
    十、Zabbix-自动关联模板
    九、Zabbix-触发器
    八、Zabbix-应用集、监控项
    七、Zabbix-模板,应用集,监控项,触发器
  • 原文地址:https://www.cnblogs.com/lucari/p/4608583.html
Copyright © 2011-2022 走看看