• 设计模式-装饰模式(Decorator)


    装饰模式又叫包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。

    角色和职责:

    1.抽象组件(Component)-Car:

       为统一接口,也是装饰类和被装饰类的统一接口

    2.具体组件(concrete Component)-RunCar:

        抽象组件的具体实现

    3.抽象装饰角色(Decorator)-Decorator:

        包含一个组件的引用,并定义了与抽象组件一致的接口

    4.具体装饰(concrete Decorator)-FlyCarDecorator、SwimCarDecorator:

       负责具体的装饰

    UML图:

    具体代码如下:

    /**
     * 汽车基类
     */
    public interface Car {
        void run();
    }
    /**
     * 会跑的汽车
     */
    public class RunCar implements Car{
        @Override
        public void run() {
            System.out.println("汽车会跑");
        }
    }
    /**
     * 装饰基类,实现和Car相同的方法
     */
    public abstract class Decorator implements Car{
        protected Car car;
        public Decorator(Car car){
            this.car =car;
        }
    }
    /**
     * 会飞的汽车
     */
    public class FlyCarDecorator extends Decorator{
        public FlyCarDecorator(Car car) {
            super(car);
        }
    
        @Override
        public void run() {
            this.car.run();
            this.run1();
        }
    
        private void run1(){
            System.out.println("还会飞");
        }
    }
    /**
     * 会游的汽车
     */
    public class SwimCarDecorator extends Decorator{
        public SwimCarDecorator(Car car) {
            super(car);
        }
    
        @Override
        public void run() {
            this.car.run();
            this.run1();
        }
    
        private void run1(){
            System.out.println("还会游");
        }
    }
    public class Main {
        public static void main(String[] args) {
            Car runCar = new RunCar();//会跑的汽车
            runCar.run();
            System.out.println("----------------------------");
    
            Car flyRunCar = new FlyCarDecorator(runCar);//装饰会跑的汽车,变成会跑又会飞的汽车
            flyRunCar.run();
            System.out.println("----------------------");
    
            Car swimFlyRunCar = new SwimCarDecorator(flyRunCar);//装饰会跑会飞的汽车,变成会跑会飞会游的汽车
            swimFlyRunCar.run();
        }
    }

    结果:

    汽车会跑
    ----------------------------
    汽车会跑
    还会飞
    ----------------------
    汽车会跑
    还会飞
    还会游

    具体源码:https://github.com/qjm201000/design_pattern_decorator.git

  • 相关阅读:
    【Netty之旅四】你一定看得懂的Netty客户端启动源码分析!
    Netty之旅三:Netty服务端启动源码分析,一梭子带走!
    【原创】经验分享:一个Content-Length引发的血案(almost....)
    Netty之旅二:口口相传的高性能Netty到底是什么?
    Java解压和压缩带密码的zip文件过程详解
    SQLServer安装教程(史上最详细版本)
    26.Vue技术栈开发实战-项目部署
    25.Vue技术栈开发实战-多Tab页开发
    6-6 创建产品卡片组件(1)
    6-5 创建垂直网格组件
  • 原文地址:https://www.cnblogs.com/qjm201000/p/10061621.html
Copyright © 2020-2023  润新知