zoukankan      html  css  js  c++  java
  • 装饰者模式(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());
    
        }
    }
    
    
    
    • 输出如下:

    以上
    希望对大家有所帮助

  • 相关阅读:
    SpringBoot配置文件(2)
    SpringBoot配置文件(1)
    java8新特性之stream流
    java8新特性之Lambda表达式
    zoj 1709 Oil Deposits
    zoj 2110 Tempter of the Bone
    poj 2823 Sliding Window
    fzu 1894 志愿者选拔
    hdoj 1754 I Hate It
    poj2404中国邮递员
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/14295732.html
Copyright © 2011-2022 走看看