装饰模式 Decorator

装饰模式可以给一个对象动态的添加一些额外的职责(通过装载兄弟类对象的方式)。就增加功能来说,装饰模式比生成子类更加灵活。

接下来我举一个例子:

Finery类是Person类的子类。

BigTrouser类和TShirt类是 Finery类的子类。

现在想给BigTrouser类的对象 添加穿TShirt的功能,就要采用装饰模式。

先上代码:

package com.wjy.decorator;

public  class Person {
     private String name;
  public Person(){
      
  }
  public Person(String name){
      this.name=name;
  }
  public  void Show(){
      System.out.println("装扮:"+name);
  }
}
package com.wjy.decorator;

public class Finery extends Person{
    protected Person component;
    public void Decorator(Person component)
    {
        this.component=component;
    }
    @Override
    public void Show() {
        // TODO Auto-generated method stub
        if(component!=null)
        {
            component.Show();
        }
    }
  
}
package com.wjy.decorator;

public class TShirts extends Finery{
    public TShirts()
    {
        super();
    }
public void Show()
 {
     
     super.Show();
     System.out.println("大体恤");
 }
}
package com.wjy.decorator;

public class BigTrouser extends Finery{
public BigTrouser() {
        super();
        // TODO Auto-generated constructor stub
    }

public void Show(){
    super.Show();
     System.out.println("裤头");
     
 }
}

在Main方法中是这样调用的:

package com.wjy.decorator;

public class Start {
   public static void main(String[] args){
       //Person person=new Person("小菜"); 
       
       BigTrouser bigtrouser=new BigTrouser();
       TShirts tShirts=new TShirts();
       
       //tShirts.Decorator(person);
       bigtrouser.Decorator(tShirts);
       
       bigtrouser.Show();
   }
}

 

如上所示:BigTrouser类的对象将TShirt类的对象包含在自己聚合的Person对象中,这样在BigTrouser类的处理代码中调用super.处理函数();而在BigTrouser类和TShirt类的共同的父类中的 处理函数是这样写的 component.处理函数(); 就是说要调用 BigTrouser对象中聚合的Person对象(就是TShirt的对象)的处理方法,这样一来,BigTrouser对象一调用方法实质上是先调用了TShirt类的处理方法,再调用自己的处理方法。这样一来就使得这个BigTshirt对象拥有了处理TShirt的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值