装饰模式简介
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
装饰模式是为已有功能动态地添加更多功能的一种方式。
实例 -穿衣服
Person
public class Person {
public Person() {
}
private String name;
public Person(String name) {
this.name = name;
}
public void Show()
{
System.out.print(name);
}
}
Finery
public class Finery extends Person {
protected Person compent;
public void Decorate(Person compent)
{
this.compent = compent;
}
@Override
public void Show() {
if(compent!=null)
{
compent.Show();
}
}
}
class TShirt extends Finery{
@Override
public void Show() {
System.out.print("T恤 ");
super.Show();
}
}
class Skirt extends Finery{
@Override
public void Show() {
System.out.print("裙子 ");
super.Show();
}
}
class Shoes extends Finery{
@Override
public void Show() {
System.out.print("鞋子 ");
super.Show();
}
}
Main
package Decorator;
public class Main {
public static void main(String[] args) {
Person people = new Person("jy");
TShirt tShirts = new TShirt();
Skirt skirt = new Skirt();
Shoes shoes = new Shoes();
tShirts.Decorate(people);
skirt.Decorate(tShirts);
shoes.Decorate(skirt);
shoes.Show();
}
}
结果鞋子 裙子 T恤 jy
UML图
此方法其实最大的的好处就是有效的把类的核心职责和装饰功能区分开来,而且可以去除相关的重复的装饰逻辑。当你需要某一步的时候再进行装饰,然后处理。
可以通过单步跟踪看出来他的运行情况