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());
    
        }
    }
    
    
    
    • 输出如下:

    以上
    希望对大家有所帮助

  • 相关阅读:
    后台管理、编辑器上传图片、修改用户头像、bbs小总结
    侧边栏制作成inclusion_tag、文章的点赞点踩、文章的评论
    登陆功能、bbs首页搭建、admin后台管理、首页文章展示、用户头像展示、图片防盗链、个人站点页面搭建、侧边栏展示功能、侧边栏筛选功能、将侧边栏制作成inclusion_tag
    表创建及同步、注册功能、登陆功能、搭建bbs首页
    毕设进度7
    毕设进度6
    毕设进度5
    毕设进度4
    毕设进度3
    学习进度2
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/14295732.html
Copyright © 2011-2022 走看看