• java设计模式之装饰器模式


    装饰器模式和代理模式非常相似,都是用来增强原始类的功能,只不过代理类增加了是业务逻辑之外无关的的功能。

    装饰器是在基础功能上的继续增强相关的功能。

    我们通过一个一个画笔的设计,通过装饰器模式给画笔添加新功能

    首先定义了一个抽象类

    public abstract class Pen {
        public abstract void draw();
    }

    其次我们定义一个铅笔类

    /**
     * 普通的铅笔
     */
    public class Pencil extends Pen{
        @Override
        public void draw() {
            System.out.println("Pencil.draw()");
        }
    }

    单纯一个铅笔也画不好一幅画,如果能有多个彩色铅笔就更好了

    /**
     * 给铅笔新增加了颜色功能
     */
    public class ColorDecorator extends Pen{
        protected Pen pen;
    
        public ColorDecorator(Pen pen) {
            this.pen = pen;
        }
    
        @Override
        public void draw() {
            System.out.print("RedColor ");
            pen.draw();
        }
    }

    有颜色挺好,如果线条的粗细可以调整就更好了,那我们在给铅笔装饰一个线条粗细的功能

    /**
     * 给铅笔新增了线条宽度的功能
     */
    public class WidthDecorator extends Pen{
        protected Pen pen;
    
        public WidthDecorator(Pen pen) {
            this.pen = pen;
        }
    
    
        @Override
        public void draw() {
            System.out.print("Width ");
            pen.draw();
        }
    }

    OK,这下就可以开始画画了

    public class Board {
        public static void main(String[] args) {
            Pencil pencil = new Pencil();
            pencil.draw();
            ColorDecorator colorDecorator = new ColorDecorator(pencil);
            colorDecorator.draw();
            WidthDecorator widthDecorator = new WidthDecorator(colorDecorator);
            widthDecorator.draw();
        }
    }

    我们既可以使用普通的铅笔画画,也可以不断添加新的功能。

    输出:

    Pencil.draw()
    RedColor Pencil.draw()
    Width RedColor Pencil.draw()
  • 相关阅读:
    ubuntu14.4开启ftp服务
    ubuntu14.4安装gtx970显卡驱动的艰辛历程
    jquery.dataTables的用法
    win7上安装theano keras深度学习框架
    使用BeanUtils设置属性转换String到Date类型
    keras在win7下环境搭建
    Python-try except else finally有return时执行顺序探究
    MySQL-EXPLAIN用法详解
    PHP-Windows下搭建Nginx+PHP环境
    PHP-php.ini中文版
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15859519.html
Copyright © 2020-2023  润新知