Java设计模式之装饰者模式
内容主要来自大话设计模式一书,根据看书、查阅其他文章和自己理解来记录装饰着模式这一设计模式
代码示例
未使用装饰着模式的代码
//服饰抽象类
public abstract class Finery {
public abstract void show();
}
/**
各种服饰子类
*/
//大T恤
class TShirts extends Finery {
@Override
public void show() {
System.out.println("大T恤");
}
}
// 垮裤
class BigTrouser extends Finery {
@Override
public void show() {
System.out.println("垮裤");
}
}
// ......
class Sneakers extends Finery {
@Override
public void show() {
System.out.println("破球鞋");
}
}
class Suit extends Finery {
@Override
public void show() {
System.out.println("西装");
}
}
class Tie extends Finery {
@Override
public void show() {
System.out.println("领带");
}
}
class LeatherShoes extends Finery {
@Override
public void show() {
System.out.println("皮鞋");
}
}
/**
客户端代码
*/
public static void main(String[] args) {
Person p = new Person("小明");
System.out.println("\n第一种装扮;");
Finery dtx = new TShirts();
Finery kk = new BigTrouser();
Finery pqx = new Sneakers();
dtx.show();
kk.show();
pqx.show();
p.show();
System.out.println("\n第二种装扮");
Finery xz =new Suit();
Finery ld = new Tie();
Finery px = new LeatherShoes();
xz.show();
ld.show();
px.show();
p.show();
}
使用装饰模式的代码
//Person类
public class Person {
private String name;
public Person() {
}
public Person(String name) {
this.name = name;
}
public void show() {
System.out.println("装扮的" + name);
}
}
//服饰类
public class Finery extends Person {
protected Person component;
// 打扮
public void decorate(Person component) {
this.component = component;
}
@Override
public void show() {
if (component != null) {
component.show();
}
}
}
具体服饰类同上
执行结果: