习题20240731
创始人
2024-11-11 08:33:22
0

文章目录

      • 一、使用C#实现单例模式,并说明其模式的适用场景
      • 二、使用C#实现工厂方法模式,并说明其模式的适用场景
      • 三、使用C#实现抽象工厂模式,并说明其模式的适用场景

一、使用C#实现单例模式,并说明其模式的适用场景

using System; using System.IO;  public class Singleton {     private static Singleton instance=null;     private static object _lock = new object();      private Singleton()     {         Console.Write("实例化");     }      public static Singleton Instance()     {         if (instance == null)         {             lock (_lock)             {                 if (instance == null)                 {                     instance = new Singleton();                 }             }         }         return instance;     }  }  namespace ConsoleApp1 {     internal class Program     {         static void Main(string[] args)         {             Singleton a = Singleton.Instance();             Singleton b = Singleton.Instance();             Console.ReadKey();          }     } } 
  • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实
    例时。

二、使用C#实现工厂方法模式,并说明其模式的适用场景

CreditCard.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace ConsoleApp1 {     public interface CreditCard     {         string GetCardType();         int GetCreditLimit();         int GetAnnualCharge();     } } 

MoneyBack.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace ConsoleApp1 {     public class Moneyback:CreditCard     {         public string GetCardType()         {             return "MoneyBack";         }          public int GetCreditLimit()         {             return 15000;         }          public int GetAnnualCharge()         {             return 500;         }     } } 

Titanium.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace ConsoleApp1 {     public class Titanium:CreditCard     {         public string GetCardType()         {             return "Titanium Edge";         }          public int GetCreditLimit()         {             return 25000;         }          public int GetAnnualCharge()         {             return 1500;         }     } } 

Platinum.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace ConsoleApp1 {     public class Platinum:CreditCard     {         public string GetCardType()         {             return "Platinum Plus";         }          public int GetCreditLimit()         {             return 35000;         }          public int GetAnnualCharge()         {             return 2000;         }     } } 

CreditCardfactory.cs(工厂类)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;  namespace ConsoleApp1 {     public class CreditCardfactory     {         public static CreditCard GetCreditCard(string cardType)         {             CreditCard cardDetials = null;              if (cardType == "MoneyBack")             {                 cardDetials = new Moneyback();             }             else if (cardType == "Titanium")             {                 cardDetials = new Titanium();             }             else if(cardType=="Platinum"){                 cardDetials = new Platinum();             }             return cardDetials;         }     } } 

program.cs

using System; using System.IO;    namespace ConsoleApp1 {     internal class Program     {         static void Main(string[] args)         {             CreditCard cardDetails = CreditCardfactory.GetCreditCard("Platinum");              if(cardDetails != null ) {                 Console.WriteLine("CardType:" + cardDetails.GetCardType());                 Console.WriteLine("CreditLimit:" + cardDetails.GetCreditLimit());                 Console.WriteLine("AnnualCharge:" + cardDetails.GetAnnualCharge());              }             else             {                 Console.WriteLine("Invalid Card Type");             }             Console.ReadLine();         }     } } 
  • 复杂对象创建
  • 解耦性
  • 有条件的对象创建
  • 可拓展性
  • 可维护性

三、使用C#实现抽象工厂模式,并说明其模式的适用场景

using System; using System.Drawing;  namespace Client {     internal class Program     {         static void Main(string[] args)         {             //哥哥欧式风格的房子             AbstractFactory europeanFacory = new EuropeanFactory();             europeanFacory.CreateRoof().Create();             europeanFacory.CreateFloor().Create();             europeanFacory.CreateWindow().Create();             europeanFacory.CreateDoor().Create();              //弟弟现代风格的房子             AbstractFactory modernizationFacroty = new ModernizationFactory();             modernizationFacroty.CreateRoof().Create();             modernizationFacroty.CreateFloor().Create();             modernizationFacroty.CreateWindow().Create();             modernizationFacroty.CreateDoor().Create();             Console.Read();         }     } }  //抽象工厂类,提供创建不同类型房子的接口 public abstract class AbstractFactory {     public abstract Roof CreateRoof();     public abstract Floor CreateFloor();     public abstract Window CreateWindow();     public abstract Door CreateDoor(); }  //欧式风格的工厂 public class EuropeanFactory : AbstractFactory {     public override Roof CreateRoof()     {         return new EuropeanRoof();     }      public override Floor CreateFloor()     {         return new EuropeanFloor();     }      public override Window CreateWindow()     {         return new EuropeanWindow();     }      public override Door CreateDoor()     {         return new EuropeanDoor();     } }  //现在风格的工厂 public class ModernizationFactory : AbstractFactory {     public override Roof CreateRoof()     {         return new ModernizationRoof();     }      public override Floor CreateFloor()     {         return new ModernizationFloor();     }      public override Window CreateWindow()     {         return new ModernizationWindow();     }      public override Door CreateDoor()     {         return new ModernizationDoor();     } }  //房屋抽象类 public abstract class Roof {     public abstract void Create(); }  public abstract class Floor {     public abstract void Create(); }  public abstract class Window {     public abstract void Create(); }  public abstract class Door {     public abstract void Create(); }  //欧式地板类 public class EuropeanFloor : Floor {     public override void Create()     {         Console.WriteLine("创建欧式的地板");     } }  public class EuropeanRoof : Roof {     public override void Create()     {         Console.WriteLine("创建欧式的房顶");     } }  public class EuropeanWindow : Window {     public override void Create()     {         Console.WriteLine("创建欧式的窗户");     } }  public class EuropeanDoor : Door {     public override void Create()     {         Console.WriteLine("创建欧式的房门");     } }  public class ModernizationFloor : Floor {     public override void Create()     {         Console.WriteLine("创建现代风格的地板");     } }  public class ModernizationRoof : Roof {     public override void Create()     {         Console.WriteLine("创建现代风格的房顶");     } }  public class ModernizationWindow : Window {     public override void Create()     {         Console.WriteLine("创建现代风格的窗户");     } }  public class ModernizationDoor : Door {     public override void Create()     {         Console.WriteLine("创建现代风格的房门");     } } 

如果系统需要多套的代码解决方案,并且每套的代码方案中又有很多相互关联的产品类型,并且在系统中我们可以相互替换的使用一套产品的时候可以使用该模式,客户端不需要依赖具体实现。

相关内容

热门资讯

一分钟了解“金花链接房卡找谁买... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享受...
华为买谷歌安卓系统,探索自主创... 你知道吗?最近有个大新闻在科技圈里炸开了锅,那就是华为竟然出手购买了谷歌的安卓系统!这可不是一个简单...
实测分享”海洋世界有挂吗“卡农... 实测分享”海洋世界有挂吗“卡农大厅房间卡怎么购买游戏中心打开微信,添加客服【113857776】,进...
秒懂教程!玩拼三张房卡从哪里买... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:71319951许多玩家在游戏中会购买房卡来享...
正版授权“玩链接牛牛金花房卡是... 新天道是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来享...
推荐一款!金花房卡专卖店新西游... 您好!微信新西游/飞鹰互娱大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(新西游/飞鹰...
玩家须知”海洋世界怎么买房卡“... 来教大家如何使用怎么买房卡房卡充值 添加房卡批售商:微【113857775】复制到微信搜索、直接添加...
重大通报,金花微信链接市场价格... 海草众厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
秒懂教程!怎么创建拼三张房间卡... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:66336574许多玩家在游戏中会购买房卡来享...
IA解析/金花房卡出售新奇玩乐... IA解析/金花房卡出售新奇玩乐/微信链接房卡购买渠道新奇玩乐是一款非常受欢迎的游戏,咨询房/卡添加微...
ia实测“金花房卡链接怎么购买... 新超圣牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
实测分享”赢家众娱房卡获取“拼... 实测分享”赢家众娱房卡获取“拼十房卡充值 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服【11...
ia攻略/斗牛房间怎么创建的生... 生肖系列/新大圣是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:33...
秒懂教程!微信牛牛房卡怎样开,... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:56001354许多玩家在游戏中会购买房卡来享受...
科技实测!牛牛房卡出售旺旺大厅... 您好!微信旺旺大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(旺旺大厅)大厅介绍:...
玩家攻略”赢家众娱是如何购买的... 玩家攻略”赢家众娱是如何购买的“详细房卡使用教程 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客...
一分钟推荐“微信怎样开炸金花房... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享受...
推荐一款!牛牛房卡出售江山大厅... 今 日消息,江山大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
正规平台有哪些,游戏推荐斗牛房... 神盾大厅/新天道房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 ...
玩家须知”海豚大厅如何购买房卡... 玩家须知”海豚大厅如何购买房卡“拼三张房卡充值 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服...