//第一版
/*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();
}
}