类型:结构模式
动态的对一个对象进行功能上的扩展,也可以对其子类进行功能上的扩展。
uml图
package car_package;
public abstract class car_parent {
// 汽车抽象父类
private String make_address;
private int speed;
public String getMake_address() {
return make_address;
}
public void setMake_address(String make_address) {
this.make_address = make_address;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public abstract void print_face();
}
然后新建一个奥迪汽车子类
package car_package;
public class audi_sub extends car_parent {
// 奥迪汽车子类
@Override
public void print_face() {
System.out.println("audi车默认的颜色为 黑色");
}
}
然后再新建一个装饰者父类:
package decorator_package;
import car_package.car_parent;
public abstract class decorator_parent extends car_parent {
// 装饰者父类
protected car_parent car_parent_ref;
public void setCar_parent_ref(car_parent car_parent_ref) {
this.car_parent_ref = car_parent_ref;
}
@Override
public void print_face() {
car_parent_ref.print_face();
}
}
然后再新建装饰者子类:红色火焰装饰者类:
package decorator_package;
public class decorator_audi_red extends decorator_parent {
@Override
public void print_face() {
super.print_face();
System.out.println("给 奥迪 喷涂鸦 - 颜色为 红色火焰");
}
}
然后再新建装饰者子类:紫色霞光装饰者类:
package decorator_package;
public class decorator_audi_purple extends decorator_parent {
@Override
public void print_face() {
super.print_face();
System.out.println("给 奥迪 喷涂鸦 - 颜色为 紫色霞光");
}
}
新建一个运行类
package main_run;
import car_package.audi_sub;
import decorator_package.decorator_audi_purple;
import decorator_package.decorator_audi_red;
public class main_run {
public static void main(String[] args) {
audi_sub audi_sub_ref = new audi_sub();
audi_sub_ref.setMake_address("北京市朝阳区");
audi_sub_ref.setSpeed(200);
decorator_audi_red decorator_audi_red_ref = new decorator_audi_red();
decorator_audi_red_ref.setCar_parent_ref(audi_sub_ref);
decorator_audi_purple decorator_audi_purple_ref = new decorator_audi_purple();
decorator_audi_purple_ref.setCar_parent_ref(decorator_audi_red_ref);
decorator_audi_purple_ref.print_face();
}
}
package decorator;
public interface Component{
public void setName(String aName);
public String getName();
}
ConcreteComponent代码:
package decorator;
public class ConcreteComponent implements Component{
String name;
public void setName(String aName){
name = aName;
}
public String getName(){
return name;
}
}
Decorator代码:
package decorator;
public class Decorator implements Component{
private Component component;
public Decorator(Component c){
component = c;
}
public void setName(String aName){
component.setName(aName);
}
public String getName(){
return "Name :"+component.getName();
}
}
Client代码
package decorator;
public class Client {
public static void main(String[] args){
Component c= new ConcreteComponent();
Component d = new Decorator(c);
c.setName("Lili");
System.out.println(c.getName());
d.setName("Lili");
System.out.println(d.getName());
}
}