C#设计模式之Facade外观模式解决天河城购物问题示例
作者:GhostRider 发布时间:2023-06-10 08:28:36
标签:C#,设计模式,Facade,外观模式
本文实例讲述了C#设计模式之Facade外观模式解决天河城购物问题。分享给大家供大家参考,具体如下:
一、理论定义
外观模式 把 分散的子系统,集合成一个系统,提供一站式服务。
二、应用举例
需求描述: 聂小倩 和 宁采臣是一对小富则安 的聊斋夫妻。住在比较偏远的小乡村。
今天,两人初次来到大城市广州,听说天河城提供一站式服务,不像小城市那样,买个东西 得 东奔西跑。
在一个地方,就可以买到 自己想要的衣服,电脑,鞋子,Iphone,还可以看大片,
吃冰淇淋,吃真功夫,买化妆品,珠宝首饰。天河城,果然是一宝地啊。
Ok,边走边看。
三、具体编码
1.阿迪达斯
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// 阿迪达斯
/// </summary>
public class Adidas
{
public void Serivce(string something) {
Console.WriteLine("在阿迪达斯购买了: "+something);
}
}
}
2.飞扬影城
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// 飞扬影城
/// </summary>
public class FeiYangMovie
{
public void Serivce(string something)
{
Console.WriteLine("在飞扬影城看了一部电影: " + something);
}
}
}
3.国美电器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// 国美电器
/// </summary>
public class GoMe
{
public void Serivce(string something)
{
Console.WriteLine("在国美电器 买了: " + something);
}
}
}
4.哈根达斯
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// 哈根达斯
/// </summary>
public class HaagenDaz
{
public void Serivce(string something)
{
Console.WriteLine("在哈根达斯 买了: " + something);
}
}
}
5.真功夫
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// 真功夫
/// </summary>
public class KungFu
{
public void Serivce(string something)
{
Console.WriteLine("在真功夫 吃了: " + something);
}
}
}
6.六福珠宝
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// 六福珠宝
/// </summary>
public class LukFook
{
public void Serivce(string something)
{
Console.WriteLine("在六福珠宝 买了: " + something);
}
}
}
7.耐克
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// 耐克
/// </summary>
public class NIKE
{
public void Serivce(string something)
{
Console.WriteLine("在耐克店 买了: " + something);
}
}
}
8.ONLY
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// ONLY时装
/// </summary>
public class ONLY
{
public void Serivce(string something)
{
Console.WriteLine("在ONLY时装 买了: " + something);
}
}
}
9.苏宁电器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// 苏宁电器
/// </summary>
public class Suning
{
public void Serivce(string something)
{
Console.WriteLine("在苏宁电器 买了: " + something);
}
}
}
10.Veromoda国际时装品牌
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// Veromoda国际时装品牌
/// </summary>
public class Veromoda
{
public void Serivce(string something)
{
Console.WriteLine(something);
}
}
}
11.消费者
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// 消费店子
/// </summary>
public enum ShopOption
{
Adidas = 1, DKNY = 2, GoMe = 3,
NIKE = 4, Suning = 5, Veromoda = 6,
FeiYangMovie = 7, HaagenDaz = 8, LukFook = 9, KungFu = 10
}
/// <summary>
/// 消费单
/// </summary>
public class Bill {
/// <summary>
/// 要去的消费店
/// </summary>
public ShopOption Item { get; set; }
/// <summary>
/// 去这个店要买啥
/// </summary>
public string Something { get; set; }
}
public class Consumer
{
/// <summary>
/// 消费单
/// </summary>
public IList<Bill> Items { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
}
}
12.天河城---一站式服务
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace Com.Design.Gof.Facade
{
/// <summary>
/// 天河城
/// </summary>
public class TeeMall
{
private static readonly Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + @"\Com.Design.Gof.dll");
/// <summary>
/// 一站式服务
/// </summary>
/// <param name="consumer"></param>
public void OfferService(Consumer consumer) {
Console.WriteLine("我是: " + consumer.Name+",不差钱,今天来天河城玩: ");
Console.WriteLine("----------------------------------------------");
foreach (Bill item in consumer.Items)
{
object obj= assembly.CreateInstance("Com.Design.Gof.Facade." + item.Item);
MethodInfo info = obj.GetType().GetMethod("Serivce");
info.Invoke(obj, new object[] { item.Something });
}
Console.WriteLine();
}
}
}
13.主函数调用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Design.Gof.Facade;
namespace Com.Design.Gof.Test
{
class Program
{
static void Main(string[] args)
{
//天河城购物中心
TeeMall TeeMall = new TeeMall();
//消费者 1
Consumer consumer = new Consumer
{
Name="聂小倩",
//消费单
Items = new List<Bill> {
new Bill{ Item=ShopOption.Adidas, Something="运动服"},
new Bill{ Item=ShopOption.GoMe, Something="苹果IPhone智能手机"},
new Bill{ Item=ShopOption.FeiYangMovie, Something="<冰河世纪 4>"},
new Bill{ Item=ShopOption.KungFu, Something="香菇炖鸡"},
new Bill{ Item=ShopOption.LukFook, Something="金项链"},
}
};
TeeMall.OfferService(consumer);
//消费者 2
consumer = new Consumer
{
Name = "宁采臣",
//消费单
Items = new List<Bill> {
new Bill{ Item=ShopOption.FeiYangMovie, Something="《太空一号》"},
new Bill{ Item=ShopOption.Veromoda, Something="然后去了Veromoda时装,买了一套服装"},
new Bill{ Item=ShopOption.HaagenDaz, Something="买了一雪糕"},
new Bill{ Item=ShopOption.Suning, Something="在苏宁看买平板电脑"},
}
};
TeeMall.OfferService(consumer);
Console.ReadKey();
}
}
}
14.运行结果
15.总结
天河城 TeeMall 理论上应该包括 所有 商场的引用,
这里用反射 避免了这一动作。
附:完整实例代码点击此处本站下载。
希望本文所述对大家C#程序设计有所帮助。
来源:http://www.cnblogs.com/HCCZX/archive/2012/08/13/2636459.html


猜你喜欢
- 1. Mybatis分页插件1.1 分页插件介绍分页可以将很多条结果进行分页显示。如果当前在第一页,则没有上一页。如果当前在最后一页,则没有
- 前言今天介绍的是关于Spring的数据库连接以及Jdbc模板的相关API方法,虽然在学习了hibernate之后,会知道实现数据库连接一般都
- Java是一种面向对象的编程语言,由Sun Microsystems公司在1995年的时候正式发布。直到今天,Java都一直是最受欢迎的编程
- 1,如今NestedScrolling运用到很多地方了,要想好看一点的滑动变换,基本上就是使用这个来完成的,让我们来简单的了解一下。2,Ne
- Android RollPagerView实现轮播图android图片轮播效果,RollViewPager的简单使用 <c
- 这篇总结的形式是提出个问题,然后给出问题的答案。这是目前学习知识的一种尝试,可以让学习更有目的。Q1.什么时候应当重写对象的equals方法
- 记得面试时候,有面试官会问道,你们多数据源是怎么实现的呀。.......,一阵蒙蔽中,然后说道我们之前项目中,没有用到多数据源。所幸,目前做
- SpringCloud Zuul 是SpringCloud系列的网关实现,具有均衡负载,将非业务性校验剥离出来,使微服务专注于业务的一个组件
- 本文实例讲述了C#使用委托(delegate)实现在两个form之间传递数据的方法。分享给大家供大家参考。具体分析如下:关于Delegate
- 在本文中,我将向你展示c#编程的5个最佳实践。我从日常编程经验中学到了这些实践。我在release模式下测试了所有的代码,并在开发环境稳定后
- Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口)、Org.apache接口和Android.n
- 一、效果:我们看到很多软件的通讯录在右侧都有一个字母索引功能,像微信,小米通讯录,QQ,还有美团选择地区等等。这里我截了一张美团选择城市的图
- 由于我使用的是properties类型的配置文件,在对druid的参数进行配置的时候,多加了druid,也就是spring.datasour
- 异步方法很好的解决了这些问题,异步执行某个方法,程序立即开辟一个新线程去运行你的方法,主线程包括界面就不会死掉了。异步如何开始,好理解,现在
- 1 需求描述我们现在要干一个什么事情呢,我们要在浏览器输入一个请求地址,然后我们的后端就给我返回一个User对象即可,并且我希望以Json的
- 这篇文章主要介绍了Spring Cloud Hystrix异常处理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 一、 * 概念 * 分为JDK * 和cglib * 两种方式。jdk * 是由Java内部的反射机制来实现的,cglib *
- 上一篇文章自定义viewgroup(1)地址:https://www.jb51.net/article/100608.htm这里直接代码:p
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,
- Volley简介我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发