zoukankan      html  css  js  c++  java
  • java 设计模式 之 装饰器模式

    • 装饰器模式的作用

        在不修改原先对象核心的功能的情况下,对功能进行增强。

    • 增强对象的功能的途径
    1. 通过类继承的方式,对父对象进行增强操作,例如造车是父类,改装跑车,跑车加大灯,改装房车,房车加私人电影院。如图: 通过这种方式做的装饰类会因为业务的复杂性激增

        

       2.通过装饰模式,将方法增强。如图

    • 装饰模式架构

      car :被装饰的抽象类

      

    package javadesign.decorate;
    
    /**
     * 抽象小汽车
     */
    public  interface Car {
    
        public    void buildCar();
    
    }

    benCar:被装饰的实现

    package javadesign.decorate;
    
    public class BenCar implements Car {
    
    
        @Override
        public void buildCar() {
            System.out.println("建造一辆车");
        }
    }

    Decorator:装饰的类

    package javadesign.decorate;
    
    public class Decorator implements Car {
    
        public Car car;
    
        public Decorator(Car car){
            this.car=car;
        }
    
    
        @Override
        public void buildCar() {
            this.car.buildCar();
        }
    }
    StrongDecorator:装饰的实现
    package javadesign.decorate;
    
    public class Decorator implements Car {
    
        public Car car;
    
        public Decorator(Car car){
            this.car=car;
        }
    
    
        @Override
        public void buildCar() {
            this.car.buildCar();
        }
    }

    Client:测试类

    package javadesign.decorate;
    
    public class Client {
    
        public static void main(String[] args) {
            Car car=new BenCar();
            Decorator decorator=new StrongDecorator(car);
            ((StrongDecorator) decorator).buildSportsCar();
            ((StrongDecorator) decorator).buildHouseCar();
        }
    }

    测试结果:

    总结:装饰模式在不改变原先核心功能的情况下,可以实现增强,并且不会产生很多继承类,按照业务模块划分,通过不同的方法进行装饰。

  • 相关阅读:
    (二十八)缓存:很多时候我们都用错了!
    (二十七)缓存:进程内缓存要怎么玩?
    JavaScript 获取7天之前或之后的日期
    实现文本复制功能
    vue项目 PC端点击查看大图
    vue使用canvas生成海报图
    禁用微信转发给好友和朋友圈
    vue防抖节流函数---组件封装,防止按钮多次点击
    看到几个不错的打印方式,分享几个觉得不错的
    为啥没更新呢
  • 原文地址:https://www.cnblogs.com/blogxiao/p/11206509.html
Copyright © 2011-2022 走看看