Skip to content

Instantly share code, notes, and snippets.

@ChengYiWu
Last active July 21, 2017 07:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ChengYiWu/5fcda81fef27ce2ca81bd84d9875f1ca to your computer and use it in GitHub Desktop.
Save ChengYiWu/5fcda81fef27ce2ca81bd84d9875f1ca to your computer and use it in GitHub Desktop.
【Design Patterns】Decorator 實作與應用
public Document PrintWord2(IList<AttachmentModel> attachments){
// 「封面一」 + 「空白頁」
MeetingMinutesWordPrinter cover1 = new MinutesCoverDocumentPrinter("(附件一)"); // 產生「封面一」的文件
MeetingMinutesWordPrinter conver1WithWhitePage = new WhitePageDecorator(cover1); // 將「封面一」文件後面加入「空白頁」
// 「附件」 + 「區塊」 + 「頁碼」
MeetingMinutesWordPrinter attachment = new MinutesAttachmentPrinter(attachments); // 產生「附件」的文件
MeetingMinutesWordPrinter attachmentWithPageNumber = new PageNumberDecorator(new NewSectionDecorator(attachment)); // 將「附件」文件區域加入「頁碼」顯示
// 「封面二」 + 「區塊」
MeetingMinutesWordPrinter cover2 = new MinutesCoverDocumentPrinter("(附件二)"); // 產生「封面二」的文件
MeetingMinutesWordPrinter cover2WithNewSection = new NewSectionDecorator(cover2); // 指定「封面二」區塊為獨立區塊,否則會被上面「頁碼」影響
// 「封面一」 + 「空白頁」 + 「附件」 + 「封面二」 => 「合併」 => 最終文件
MeetingMinutesWordPrinter resultWord =
new MergeDecorator(new MergeDecorator(conver1WithWhitePage , attachmentWithPageNumber) , cover2WithNewSection); // 將上面準備好的文件區塊「合併」成為一個最終文件
return resultWord.PrintDocument();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment