装饰模式一步步实现

//第一版
/*public class Main {
   public static void main(String args[])
   {
    Person p=new Person("小菜");
    System.out.println("第一种装扮");
    p.WearTShirt();
    p.WearBigTrouser();
    p.WearSneakers();
    p.Show();
    System.out.println("第二种装扮");
    p.WearSuit();
    p.WearTie();
    p.WearLeatherShoes();
    p.Show();
 }
}
class Person{
 private String name;
 public Person(String name) {
  super();
  this.name = name;
 }
 public void WearTShirt() {
  System.out.println("大T恤");
 }
 public void WearBigTrouser() {
  System.out.println("垮裤");
 }
 public void WearSneakers() {
  System.out.println("破球鞋");
 }
 public void WearSuit() {
  System.out.println("西装");
 }
 public void WearTie() {
  System.out.println("领带");
 }
 public void WearLeatherShoes() {
  System.out.println("皮鞋");
 }
 public void Show() {
  System.out.println("装扮的"+name);
 }
}*/
//第二版
/*public class Main {
   public static void main(String args[])
   {
    Person p=new Person("小菜");
    Finery t1=new TShirt();
    Finery b1=new BigTrouser();
    Finery w1=new WearSneakers();
    System.out.println("第一种装扮");
    t1.Show();
    b1.Show();
    w1.Show();
    p.Show();
    Finery s1=new WearSuit();
    Finery t2=new WearTie();
    Finery ls=new WearLeatherShoes();
    System.out.println("第二种装扮");
    s1.Show();
    t2.Show();
    ls.Show();
    p.Show();
 }
}
class Person{
 private String name;
 public Person(String name) {
  super();
  this.name = name;
 }
 public void Show() {
  System.out.println("装扮的"+name);
 }
}
abstract class Finery{
 public abstract void Show();
}
class TShirt extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("大T恤");
 }
}
class BigTrouser extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("垮裤");
 }
}
class WearSneakers extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("破球鞋");
 }
}
class WearSuit extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("西装");
 }
}
class WearTie extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("领带");
 }
}
class WearLeatherShoes extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("皮鞋");
 }
}*/
//装饰模式
public class Main {
   public static void main(String args[])
   {
    String name="小菜";
    Person p=new Person(name) {
     public void Show() {
      System.out.println("装扮的"+name);
     }
    };
    System.out.println("第一种装扮");
    TShirt t1=new TShirt();
    BigTrouser b1=new BigTrouser();
    WearSneakers s1=new WearSneakers();
    t1.Decorate(p);
    b1.Decorate(t1);
    s1.Decorate(b1);
    s1.Show();
    System.out.println("第二种装扮");
    WearSuit s2=new WearSuit();
    WearTie t2=new WearTie();
    WearLeatherShoes ls=new WearLeatherShoes();
    s2.Decorate(p);
    t2.Decorate(s2);
    ls.Decorate(t2);
    ls.Show();
 }
}
abstract class Person{
 private String name;
 public Person() {}
 public Person(String name) {
  this.name=name;
 }
 public abstract void Show();
}
class Finery extends Person{
 private Person component;
 public void Decorate(Person component) {
  this.component=component;
 }
 public void Show() {
  if(component!=null) {
   component.Show();
  }
 }
}
class TShirt extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("大T恤");
  super.Show();
 }
}
class BigTrouser extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("垮裤");
  super.Show();
 }
}
class WearSneakers extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("破球鞋");
  super.Show();
 }
}
class WearSuit extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("西装");
  super.Show();
 }
}
class WearTie extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("领带");
  super.Show();
 }
}
class WearLeatherShoes extends Finery{
 public void Show() {
  // TODO Auto-generated method stub
  System.out.println("皮鞋");
  super.Show();
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值