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
0
投稿
猜你喜欢
- ①概念二叉搜索树又称二叉排序树,它或者是一棵空树**,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
- 平时用到的库仓库名地址备注mavenCentralhttps://repo1.maven.org/maven2/
- 前言总是觉得对HashMap很熟悉,但最近连续被问到几个关于它的问题,才发现它其实并不简单。这里对关于它的一些问题做个总结,也希望能够大家一
- 返回Json实体类属性大小写问题总归上述问题Rt,其实今天开发刚遇到,当时找了半天为啥前台传参后台却接收不到,原来是返回的时候返回小写,但是
- 估计学过Unix开发但是没有细致学习Java的同学们会疑惑了,操作系统里面是没有所谓的守护线程的概念,只有守护进程一说,但是Java语言机制
- 目录一、基础配置1、<parent> 标签1)使用 spring-boot-starter-parent2)使用自定义 pare
- 简介TreeMap使用红黑树存储元素,可以保证元素按key值的大小进行遍历。继承体系TreeMap实现了Map、SortedMap、Navi
- 本文实例讲述了Java Web实现添加定时任务的方法。分享给大家供大家参考,具体如下:定时任务时间控制类/** * 定时任务时间控制 * *
- 开窗函数能在每行的最后一行都显示聚合函数的结果,所以聚合函数可以用作开窗函数聚合函数和开窗函数聚合函数是将多行变成一行,如果要显示其他列,必
- 概述关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属 于某个对象的。也就是说,既
- 什么是注解在早期的工作的时候 ,自定义注解写的比较多,可大多都只是因为 这样看起来 不会存在一堆代码耦合在一起的情况,所以使用了自定义注解,
- java实现五子棋小游戏package Gomoku;import java.awt.Toolkit;import javax.swing.
- 项目背景:在项目中包含两个定时任务,配置信息如下:1、@Scheduled(initialDelay = 1,fixedDelay=1000
- 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运
- 背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大。其中又分01背包和无限背包,这里主要
- 引言java中的Math.random()是一个在[0,1)范围等概率返回double数值类型的算法,基于此函数,我们来延申一些随机概率算法
- 一、新建BeanUtil类import lombok.extern.slf4j.Slf4j;import org.springframewo
- 1.idea新建Maven项目Mybatis-study 将项目里的src文件夹删掉 依次将此项目作为父项目2.在Mybatis-study
- springboot sqlSessionFactoryBean自定义1.新建一个配置类,加上configuration注解2.定制化Sql
- 一、思路1.定义一个toFind变量来传入要查找的元素2.遍历整个顺序表并判定当前下标的元素等不等于toFind3.如果等于就返回一个tru