CSharp: Bridge Pattern in donet 6
/// <summary>
/// 桥接模式 Bridge Pattern- Structural Pattern
/// </summary>
public abstract class Document
{
/// <summary>
///
/// </summary>
protected readonly IFormatter _formatter;
/// <summary>
///
/// </summary>
/// <param name="formatter"></param>
protected Document(IFormatter formatter)
{
_formatter = formatter;
}
/// <summary>
///
/// </summary>
public abstract void Print();
}
/// <summary>
/// 桥接模式 Bridge Pattern- Structural Pattern
/// </summary>
public interface IFormatter
{
/// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
string Format(string key, string value);
}
/// <summary>
/// 桥接模式 Bridge Pattern- Structural Pattern
/// </summary>
public class TermPaper : Document
{
/// <summary>
///
/// </summary>
/// <param name="formatter"></param>
public TermPaper(IFormatter formatter)
: base(formatter)
{
}
/// <summary>
///
/// </summary>
public string Class { get; set; } = string.Empty;
/// <summary>
///
/// </summary>
public string Student { get; set; } = string.Empty;
/// <summary>
///
/// </summary>
public string Text { get; set; } = string.Empty;
/// <summary>
///
/// </summary>
public string References { get; set; } = string.Empty;
/// <summary>
///
/// </summary>
public override void Print()
{
Console.WriteLine(_formatter.Format("班级", Class));
Console.WriteLine(_formatter.Format("学生", Student));
Console.WriteLine(_formatter.Format("文本", Text));
Console.WriteLine(_formatter.Format("目录", References));
Console.WriteLine();
}
}
/// <summary>
/// 桥接模式 Bridge Pattern- Structural Pattern
/// </summary>
public class FAQ : Document
{
/// <summary>
///
/// </summary>
/// <param name="formatter"></param>
public FAQ(IFormatter formatters)
: base(formatters)
{
Questions = new Dictionary<string, string>();
}
public string Title { get; set; } = string.Empty;
public Dictionary<string, string> Questions { get; set; }
public override void Print()
{
Console.WriteLine(_formatter.Format("标题", Title));
foreach (var question in Questions)
{
Console.WriteLine(_formatter.Format(" 问题", question.Key));
Console.WriteLine(_formatter.Format(" 回答", question.Value));
}
Console.WriteLine();
}
}
/// <summary>
/// 桥接模式 Bridge Pattern- Structural Pattern
/// </summary>
public class Book : Document
{
/// <summary>
///
/// </summary>
/// <param name="formatter"></param>
public Book(IFormatter formatters)
: base(formatters)
{
}
/// <summary>
///
/// </summary>
public string Title { get; set; } = string.Empty;
/// <summary>
///
/// </summary>
public string Author { get; set; } = string.Empty;
/// <summary>
///
/// </summary>
public string Text { get; set; } = string.Empty;
/// <summary>
///
/// </summary>
public override void Print()
{
Console.WriteLine(_formatter.Format("标题", Title));
Console.WriteLine(_formatter.Format("作者", Author));
Console.WriteLine(_formatter.Format("文本", Text));
Console.WriteLine();
}
/// <summary>
/// 桥接模式 Bridge Pattern- Structural Pattern
/// </summary>
public class BackwardsFormatter : IFormatter
{
public string Format(string key, string value) =>
$"{key}: {new string(value.Reverse().ToArray())}";
}
/// <summary>
/// 桥接模式 Bridge Pattern- Structural Pattern
/// </summary>
public class FancyFormatter : IFormatter
{
public string Format(string key, string value) =>
$"-= {key} ----- =- {value}";
}
/// <summary>
/// 桥接模式 Bridge Pattern- Structural Pattern
/// </summary>
public class StandardFormatter : IFormatter
{
public string Format(string key, string value) =>
$"{key}: {value}";
}
/// <summary>
/// 桥接模式 Bridge Pattern- Structural Pattern
/// </summary>
public static class DocumentsAndFormattersExecutor
{
/// <summary>
///
/// </summary>
public static void Execute()
{
ConsoleExtension.WriteSeparator("桥接模式 Bridge Pattern- Documents and formatters demo");
var documents = new List<Document>();
var formatter = new FancyFormatter();
var faq = new FAQ(formatter);
faq.Title = "桥接模式常见问题解答;";
faq.Questions.Add("这是什么模式?", "桥接模式.");
faq.Questions.Add("什么时候用此模式?", "当您需要将抽象与实现分离时.");
var book = new Geovin.Du.DuBridge.DocumentsAndFormatters.Documents.Book(formatter)
{
Title = "C# 设计模式",
Author = "佚名",
Text = "内容是...",
};
var paper = new Geovin.Du.DuBridge.DocumentsAndFormatters.Documents.TermPaper(formatter)
{
Class = "桥接模式 Bridge Pattern- Design Patterns",
Student = "geovindu",
Text = "关于设计模式的文本...",
References = "GOF",
};
documents.Add(faq);
documents.Add(book);
documents.Add(paper);
foreach (var document in documents)
{
document.Print();
}
}
}
调用:
Geovin.Du.DuBridge.DocumentsAndFormatters.DocumentsAndFormattersExecutor.Execute();
输出:
桥接模式 Bridge Pattern- Documents and formatters demo -------------------------------------------------- -= 标题 ----- =- 桥接模式常见问题解答; -= 问题 ----- =- 这是什么模式? -= 回答 ----- =- 桥接模式. -= 问题 ----- =- 什么时候用此模式? -= 回答 ----- =- 当您需要将抽象与实现分离时. -= 标题 ----- =- C# 设计模式 -= 作者 ----- =- 佚名 -= 文本 ----- =- 内容是... -= 班级 ----- =- 桥接模式 Bridge Pattern- Design Patterns -= 学生 ----- =- geovindu -= 文本 ----- =- 关于设计模式的文本... -= 目录 ----- =- GOF


哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号