日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

略读-装饰器模式

發布時間:2025/4/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 略读-装饰器模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用思路:需要某類需要添加新的處理方式,但是不修改類

初始類

// The original Photo class public class Photo : Form { Image image; public Photo () { image = new Bitmap("jug.jpg"); this.Text = "Lemonade"; this.Paint += new PaintEventHandler(Drawer); } ? public virtual void Drawer(Object source, PaintEventArgs e) { e.Graphics.DrawImage(image,30,20); } ? private void InitializeComponent() { this.SuspendLayout(); // // Photo // this.ClientSize = new System.Drawing.Size(283, 250); this.Name = "Photo"; this.ResumeLayout(false); ? }

在一些情況需要擴展,但又不想改源代碼。那就看下面是怎么擴展的:

// This simple BorderedPhoto decorator adds a colored BorderedPhoto of fixed size class BorderedPhoto : Photo { Photo photo; Color color; ? public BorderedPhoto (Photo p, Color c) { photo = p; color=c; } ? public override void Drawer(Object source, PaintEventArgs e) { photo.Drawer(source, e); e.Graphics.DrawRectangle(new Pen(color, 10),25,15,215,225); } }

集成了原來的類,重新處理了一下圖片的邊框顯示。

這樣單純顯示圖片就用原來的類,需要添加邊框的時候則可以選用這個BorderedPhoto類來處理圖片。

前面的掩飾簡單描述了裝飾其模式。此模式描述應該就算結束了。

--------------------------------以下可忽略------------------------------------

?

?

高級應用則需要深入研究:

// The TaggedPhoto decorator keeps track of the tag number which gives it // a specific place to be written ? class TaggedPhoto : Photo { Photo photo; string tag; int number; static int count; List <string> tags = new List <string> (); public TaggedPhoto(Photo p, string t) { photo = p; tag = t; tags.Add(t); number = ++count; } ? public override void Drawer(Object source, PaintEventArgs e) { photo.Drawer(source,e); e.Graphics.DrawString(tag, new Font("Arial", 16), new SolidBrush(Color.Black), new PointF(80,100+number*20)); } ? public string ListTaggedPhotos() { string s = "Tags are: "; foreach (string t in tags) s +=t+" "; return s; } }

為照片添加字符描述。

?

最后看下調用代碼

static void Main () { // Application.Run acts as a simple client Photo photo; TaggedPhoto foodTaggedPhoto, colorTaggedPhoto, tag; BorderedPhoto composition; ? // Compose a photo with two TaggedPhotos and a blue BorderedPhoto photo = new Photo(); Application.Run(photo); foodTaggedPhoto = new TaggedPhoto (photo,"Food"); colorTaggedPhoto = new TaggedPhoto (foodTaggedPhoto,"Yellow"); composition = new BorderedPhoto(colorTaggedPhoto, Color.Blue); Application.Run(composition); Console.WriteLine(colorTaggedPhoto.ListTaggedPhotos()); ? // Compose a photo with one TaggedPhoto and a yellow BorderedPhoto photo = new Photo(); tag = new TaggedPhoto (photo,"Jug"); composition = new BorderedPhoto(tag, Color.Yellow); Application.Run(composition); Console.WriteLine(tag.ListTaggedPhotos()); }

顯示原始圖片

第一個,字符foodTaggedPhoto放入了原始類進行處理,結果應該是原始圖片加入food字符

第二個,字符colorTaggedPhoto放入了前一個帶food字符的圖片,再加入了yellow字符

第三個,邊框composition 放入了前一個帶food,yellow的圖片,再加入了藍色邊框

顯示第三張圖(帶food,yellow,藍色邊框)

?

第二次處理

再次初始化原始圖片

第一個,字符tag放入原始類進行處理,結果加入jug字符

第二個,邊框composition 放入前一個jug圖片,家黃色邊框

顯示第二張圖片(帶jug,黃色邊框)

轉載于:https://www.cnblogs.com/my36z/archive/2009/03/27/1422784.html

總結

以上是生活随笔為你收集整理的略读-装饰器模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。