從女神的穿衣打扮看裝飾模式java
如何穿反映一我的的品味,女神去約會,如何穿衣打扮呢?this
你須要考慮如下幾個問題!code
一、首先上身穿什麼?下身穿什麼?是須要思考的問題!繼承
二、女神想去海邊沙灘享受一下日光浴,下身至少穿個內內,上身戴個胸罩便可,再少屌絲們就會流鼻血了。。。接口
三、有了基礎的比基尼裝扮,外面再怎麼穿,就是一層層的裝飾了。ip
不管怎麼穿,全身都要穿東西的,咱們分爲上身和下身。 咱們定義一個接口來規範必須上身下身都穿衣服get
package design.pattern.decorator; /** * 女神穿衣服 * @author SB * */ public interface GoddessDress { //穿上身衣服 public void dressUp(); //穿下身衣服 public void dressDown(); }
裝飾在必定的基礎之上,首先簡單穿上小內內戴上胸罩:class
package design.pattern.decorator; public class SimpleDress implements GoddessDress{ public void dressUp(){ // 簡單穿胸罩 System.out.print(" 簡單穿胸罩 "); } public void dressDown(){ //簡單穿小內內 System.out.print(" 簡單穿小內內 "); } }
不管什麼衣服,都須要上身下身都進行裝飾,不斷的去裝飾打扮!不管怎麼穿,都須要再上一次穿着的基礎上進行,因此須要拿到上次的穿着打扮,女神不管目前穿什麼,你都可以繼續在此基礎上進行穿衣打扮!女神當前任意穿着都可以進行裝飾,因此:你須要實現穿衣的接口:基礎
package design.pattern.decorator; public abstract class DressDecorator implements GoddessDress{ //首先要有給女神裝飾的權利 private GoddessDress goddessDress; public DressDecorator(GoddessDress goddessDress){ this.goddessDress = goddessDress; } //女神上身穿 public void dressUp(){ goddessDress.dressUp(); } //女神下身穿 public void dressDown(){ goddessDress.dressDown(); } }
以上是裝飾的方式,之後不管什麼配套衣服均可以繼承它進行穿着。im
好比上身穿個夾克,下身穿個絲襪:
package design.pattern.decorator; /** * 穿夾克絲襪 * @author SB * */ public class JacketStockingsDecorator extends DressDecorator{ public JacketStockingsDecorator(GoddessDress goddessDress){ super(goddessDress); } public void dressUp(){ super.dressUp(); dressJacket(); } public void dressJacket(){ //穿夾克 System.out.print(" 穿夾克 "); } public void dressDown(){ super.dressDown(); dressStockings(); } public void dressStockings(){ //穿絲襪 System.out.print(" 穿絲襪 "); } }
或者上身穿個風衣,下身穿個緊身褲:
package design.pattern.decorator; public class WindbreakLeggingsDecorator extends DressDecorator { public WindbreakLeggingsDecorator(GoddessDress goddessDress){ super(goddessDress); } public void dressUp(){ super.dressUp(); dressWindbreak(); } public void dressWindbreak(){ //穿風衣 System.out.print(" 穿風衣 "); } public void dressDown(){ super.dressDown(); dressLeggings(); } public void dressLeggings(){ //穿緊身褲 System.out.print(" 穿緊身褲 "); } }
下面隨便搭配一下,看看女神裝飾的怎麼樣
package design.pattern.decorator; public class GoddessDressTest { public static void main(String[] args) { GoddessDress goddessDress = new WindbreakLeggingsDecorator(new JacketStockingsDecorator(new SimpleDress())); System.out.println("女神上身穿着:"); goddessDress.dressUp(); System.out.println(); System.out.println("女神下身穿着:"); goddessDress.dressDown(); } }
一展風采
女神上身穿着: 簡單穿胸罩 穿夾克 穿風衣 女神下身穿着: 簡單穿小內內 穿絲襪 穿緊身褲
以上女神的穿衣打扮就完成了!裝飾者模式就是這樣的。在JDK中,IO包下流的相關處理就是採用這種裝飾者模式。抽時間結合看看。
要點
一、DressDecorator這個類很重要,首先要有給女神裝飾的權利,而後纔會在女神身上進行裝飾。 二、super(goddessDress);是獲取女神裝飾的權利,super.dressUp(); super.dressDown();表明在女神現有的穿着的基礎上進行裝飾。 三、SimpleDress 對女神進行簡單裝飾,裝飾的基礎。