装饰者模式

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构

①公共的接口

public interface House {
    void show();    
}

②需要装饰的类

public class StoneHouse implements House{

    @Override
    public void show() {
        System.out.println("石头房子");
    }
}

③继承了公共的接口的装饰类,它是一个抽象类

public abstract class HouseDecorator implements House{
    
    protected House decoratedHouse; 
    
    public HouseDecorator(House decoratedHouse) {
        this.decoratedHouse = decoratedHouse;
    }
    
    public void show() {
        decoratedHouse.show();
    }
}

④对装饰类进行具体的实现

public class WhiteStoneHouse extends HouseDecorator {
    
    public WhiteStoneHouse(House decoratedHouse) {
        super(decoratedHouse);
    }
    
    @Override
    public void show() {
        decoratedHouse.show();
        this.decorate();
    }
    
    private void decorate() {
        System.out.println("墙壁被刷为白色");
    }
}

⑤测试是否装饰成功

public class MainTest {

    public static void main(String[] args) {
        
        House house = new StoneHouse();
        house.show();
        
        System.out.println("==============");
        
        House decoratedHouse = new WhiteStoneHouse(house);
        decoratedHouse.show();
    }
}

 

示意图

 

 其实核心是:通过装饰类的构造方法把需要装饰的对象作为形参传入,然后对方法进行增强

posted @ 2020-05-11 19:46  yxfyg  阅读(104)  评论(0)    收藏  举报