悄然无声的 Blog
不是我不明白,这世界变化快!
posts - 113,comments - 713,views - 34万

 前言:我也是初学者,希望大家能提出意见。另外转载请注明作者和出处,毕竟花了快一周的时间才完成。

 
话说乾隆皇帝酷爱古董文物,大贪官和申当然不会放过这个溜须拍马的好机会,但是苦于他自己不懂文物,也没有时间亲自去收集鉴别,所以干脆私下里成立了一个衙门叫做文物管理局,负责给他收集天下的古董文物。他什么时候想要只需一句话,“来一件XXX”,一件文物就到他手里了。
 
看出点名堂了吧,我们的和中堂要是在现代可是设计模式高手哦。这就是简单工厂模式了。
 
文物管理局就是工厂,青铜器、字画、瓷器都是具体产品,客户端当然是和申了,他不需要亲自创建这些产品,需要的时候给工厂招呼一声就是了,虽然他不懂也没有时间去研究这些产品(当官就是好啊,呵呵)。下面看看代码吧:
 
工厂类及产品类:SimpleFactory.cs
 
using System;
using System.Collections.Generic;
using System.Text;

namespace SimpleFactory
{
   
//抽象产品:古董
    public interface  IAntique
   
{
       
string Name
       
{
           
get;
        }

    }


   
//具体产品:瓷器
    public class China : IAntique
   
{
       
public string Name
       
{
           
get { return "宋朝高级宫廷汝窑,珍宝!"; }
        }

}


   
//具体产品:水墨画
    public class Wash : IAntique
   
{
       
public string Name
       
{
           
get { return "贵妃沐浴图,少儿不宜!"; }
        }

    }


   
//具体产品:青铜器
    public class Bronze : IAntique
   
{
       
public string Name
       
{
           
get { return "秦始皇祭祀神鼎,无价之宝!"; }
        }

    }




   
//工厂:文物管理衙门
    public class Yamun
   
{
       
static public IAntique Factory(string which)
       
{
           
if (which == "瓷器") return new China();
           
else if (which == "水墨画") return new Wash();
           
else if (which == "青铜器") return new Bronze();
           
else throw new Exception("和大人您是不是记错了,我们没有这种玩意!!");
        }

    }


}

客户端:Client.cs

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

namespace SimpleFactory
{
   
class Client
   
{
       
static void Main(string[] args)
       
{
                IAntique antique;           
            try
           
{
                 //需要一个瓷器
                antique
= Yamun.Factory("瓷器");
                Console.WriteLine(antique.Name);

               
//现在要一幅字画
                antique = Yamun.Factory("水墨画");
                Console.WriteLine(antique.Name);

               
//来一件青铜器吧
                antique = Yamun.Factory("青铜器");
                Console.WriteLine(antique.Name);

               
//来一件稀奇古怪的玩意
                antique = Yamun.Factory("阿司匹林");
                Console.WriteLine(antique.Name);
            }

           
catch (Exception e)
           
{ Console.WriteLine(e.Message); }

            Console.Read();
        }

    }

}

这里有个小问题,和申必须知道衙门里都有些什么文物,如果他要了一件没有的东西就会出错,这对日理万机的和中堂来说可就是个大问题了。另外,如果出现了新种类的古董,文物管理局的内部结构就要重新调整一下,这样可不利于管理呀。不过不要紧,文物管理局由于工作做得好,已经被乾隆皇帝升格了,简单工厂模式也变成了工厂方法模式。具体怎么回事,且听下回分解。


posted on   左洸  阅读(1908)  评论(6编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
< 2005年8月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示