• 【GOF23设计模式】装饰模式


    来源:http://www.bjsxt.com/ 
    一、【GOF23设计模式】_装饰模式、IO流底层架构、装饰和桥接模式的区别

    职责

    简单案例说明

     1 package com.test.decorator;
     2 /**
     3  * Component抽象构件角色
     4  */
     5 public interface ICar {
     6     void move();
     7 }
     8 
     9 //ConcreteComponent 具体构件角色(真实对象)
    10 class Car implements ICar {
    11     @Override
    12     public void move() {
    13         System.out.println("陆地上跑!");
    14     }
    15 }
    16 
    17 //Decorator装饰角色
    18 class SuperCar implements ICar {
    19     protected ICar car;
    20 
    21     public SuperCar(ICar car) {
    22         super();
    23         this.car = car;
    24     }
    25 
    26     @Override
    27     public void move() {
    28         car.move();
    29     }
    30 }   
    31 
    32 //ConcreteDecorator具体装饰角色
    33 class FlyCar extends SuperCar {
    34 
    35     public FlyCar(ICar car) {
    36         super(car);
    37     }
    38 
    39     public void fly() {
    40         System.out.println("天上飞!");
    41     }
    42 
    43     @Override
    44     public void move() {
    45         super.move();
    46         fly();
    47     }
    48 }
    49 //ConcreteDecorator具体装饰角色
    50 class WaterCar extends SuperCar {
    51 
    52     public WaterCar(ICar car) {
    53         super(car);
    54     }
    55 
    56     public void swim() {
    57         System.out.println("水上游!");
    58     }
    59 
    60     @Override
    61     public void move() {
    62         super.move();
    63         swim();
    64     }
    65 }
    66 //ConcreteDecorator具体装饰角色
    67 class AICar extends SuperCar {
    68 
    69     public AICar(ICar car) {
    70         super(car);
    71     }
    72 
    73     public void autoMove() {
    74         System.out.println("自动跑!");
    75     }
    76 
    77     @Override
    78     public void move() {
    79         super.move();
    80         autoMove();
    81     }
    82 }
    package com.test.decorator;
    
    public class Client {
        public static void main(String[] args) {
            Car car = new Car();
            car.move();
    
            System.out.println("增加新的功能,飞行--------------");
            FlyCar flyCar = new FlyCar(car);
            flyCar.move();
    
            System.out.println("增加新的功能,水上游--------------");
            WaterCar waterCar = new WaterCar(car);
            waterCar.move();
    
            System.out.println("增加两个新的功能:飞行,水上游----------------");
            WaterCar waterCar2 = new WaterCar(new FlyCar(car));
            waterCar2.move();
        }
    }
    控制台输出:
    陆地上跑!
    增加新的功能,飞行--------------
    陆地上跑!
    天上飞!
    增加新的功能,水上游--------------
    陆地上跑!
    水上游!
    增加两个新的功能:飞行,水上游----------------
    陆地上跑!
    天上飞!
    水上游!

    实现细节

    开发中的使用场景

    IO流实现细节

    总结

    装饰模式和桥接模式的区别

  • 相关阅读:
    react Native 运行报错之一 gradle-2.14.1-all解压失败的问题
    react native windows create bundle folder
    gulp+browserSync+nodemon 实现express 全端自动刷新的实践
    nodejs框架express4.x 学习--安装篇
    转: angularjs 指令中动态编译的方法(适用于有异步请求的情况) 内嵌指令无效
    angular 基础练习
    自己写的数组排重+排序
    前端开发bower包管理器
    定位网站性能的一些经验
    记一次大规模数据迁移和加密
  • 原文地址:https://www.cnblogs.com/erbing/p/5802479.html
Copyright © 2020-2023  润新知