装饰者模式(Decoration)_java实现

//20210118
写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现装饰者模式

核心思想:

  • 构建一个带有原始属性的对象,然后通过附加类来一层一层的装饰原有对象

源代码如下:

//初始接口
public interface Man {
    String getDes();
}
//带有初始属性的类
public class NormalMan implements Man{
    private String name;

    public NormalMan(String name){
        this.name = name;
    }

    @Override
    public String getDes() {
        return name + ":";
    }
}
//抽象装饰类
public abstract class AttachedPropertiesDecorator implements Man{
    private Man man;
    public AttachedPropertiesDecorator(Man man){
        this.man = man;
    }

    @Override
    public String getDes() {
        return man.getDes();
    }
}
//实现装饰类1
public class CarDecorator extends AttachedPropertiesDecorator{
    private String car = "有车";

    public CarDecorator(Man man) {
        super(man);
    }

    public String addCar(){
        return this.car+"  ";
    }

    @Override
    public String getDes() {
        return super.getDes()+this.addCar();

    }
}
//实现装饰类2
public class DepositeDecorator extends AttachedPropertiesDecorator{
    private String deposite = "有存款";

    public DepositeDecorator(Man man) {
        super(man);
    }

    public String addDeposite(){
        return this.deposite+"  ";
    }

    @Override
    public String getDes() {
        return super.getDes() + this.addDeposite();

    }
}
//实现装饰类3
public class HouseDecorator extends AttachedPropertiesDecorator{
    private String house = "有房";

    public HouseDecorator(Man man) {
        super(man);
    }

    public String addHouse(){ return this.house+"  ";
    }

    @Override
    public String getDes() {
        return super.getDes() + this.addHouse();

    }
}

//实现装饰类4
public class QualityDecorator extends AttachedPropertiesDecorator{
    private String quality = "有好品质";

    public QualityDecorator(Man man) {
        super(man);
    }

    public String addQuality(){
        return this.quality+"  ";
    }

    @Override
    public String getDes() {
        return super.getDes() + this.addQuality();

    }
}
//测试主类
public class Main {
    public static void main(String[] args) {
        Man man= new NormalMan("张三");
        System.out.println(man.getDes());
        man = new CarDecorator(man);//加入车属性
        System.out.println(man.getDes());
        man = new DepositeDecorator(man);//加入存款属性
        System.out.println(man.getDes());
        man = new HouseDecorator(man);//加入房屋属性
        System.out.println(man.getDes());
        man = new QualityDecorator(man);//加入房屋属性
        System.out.println(man.getDes());

    }
}


  • 输出如下:

以上
希望对大家有所帮助

posted @ 2021-01-18 23:10  醉生梦死_0423  阅读(145)  评论(0编辑  收藏  举报