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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

装饰者模式之我见

發布時間:2025/7/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 装饰者模式之我见 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

舉個例子:

? ? 對于一個蛋糕店,可以有奶油蛋糕、巧克力蛋糕、冰激凌蛋糕、帶卡片的巧克力蛋糕、帶花的奶油蛋糕等等。

? ? 如果我們的設計是以蛋糕為基類,其他都是繼承自這個基類,那么會寫很多很多類,因為,用戶可能想要帶卡片的插花的冰激凌蛋糕等等。

這樣的設計顯然不好。

對于以上的情況,我們可以用設計者模式。

我們以蛋糕為基本食品類,其他的奶油、巧克力、卡片、花等都是裝飾品,當用戶想要何種裝飾,只要往蛋糕上面加裝飾品即可。

裝飾者模式需要基本類和裝飾類都實現同一個接口,以保證他們實現同樣的方法。

因為對于面向對象編程來說,主要是方法,我們用程序來模擬現實世界中的事物,也是以方法的形式。

比如,對于蛋糕、奶油和巧克力等,都實現了“評論”這個方法。

共同實現的接口為:

public interface Comment {public void show(); }

蛋糕類為:

public class Cake implements Comment {
@Override
public void show() {System.out.println("Cake is good");} }

各個裝飾者可以抽象出一個基類,這個基類實現了共同接口:

public class Decorator implements Comment {private Comment comment;public Decorator(Comment comment) {this.comment = comment;}@Overridepublic void show() {comment.show();} }

花朵裝飾者為:

public class FlowerDecorator extends Decorator {public FlowerDecorator(Comment comment) {super(comment);}@Overridepublic void show() {super.show();showSelf();}private void showSelf() {System.out.println("Flower is beautiful");} }

巧克力裝飾者為:

public class ChocolateDecorator extends Decorator {public ChocolateDecorator(Comment comment) {super(comment);}@Overridepublic void show() {super.show();showSelf();}private void showSelf() {System.out.println("Chocolate is Delicious");} }

那么,當有用戶要買插花的巧克力蛋糕時,我們可以這樣給他:

public class Client {public static void main(String[] args) {Comment comment = new ChocolateDecorator(new FlowerDecorator(new Cake()));comment.doSomething();} }

這樣,用戶要什么類型的蛋糕,只要把相應的裝飾品裝飾上去就可以了。

轉載于:https://www.cnblogs.com/tingzi/archive/2012/04/18/2456112.html

總結

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

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