• java装饰设计模式


    将一个对象作为参数进行传递,然后对这个对象进行包装---改变其中的方法或者添加一些新的行为---装饰设计模式---装饰者模式---Decorate Model

    改变一个方法:

    1. 通过继承这个类,然后重写其中的方法

    2. 通过对象的传递创建装饰对象,在装饰类中重新提供对应的方法
    继承的缺点:

    1. 单继承

    2. 利用向上造型创建了一个父类对象,可以调用子类中重写方法,不能在使用父类中原来的方法

    3. 如果父类对象已经存在,不能使用子类中重写之后的方法

    装饰设计模式的缺点:

    可能提高代码的冗余度---代理模式

    如果需要对已有对象上的方法进行改造, 可以定义类将被装饰者传入, 基于已有的功能, 添加更强的功能

    那么这个自定义的类就是装饰类. 装饰类通常会提供构造函数将被装饰者传入, 并保存在类的内部, 基于已有对象上的功能, 添加更强的功能

    实现步骤:
         a) 定义装饰类, 装饰类要求和被装饰者所属的类实现相同的接口或者是继承相同的类
         b) 在装饰类中, 通过构造方法将被装饰者传入, 保存在类的内部
         c) 对于不想改造的方法, 直接调用已有对象上的方法, 对于想要改造的方法进行改造

     1 //人的接口
     2 public interface Person {
     3 
     4     void eat();
     5 
     6     void sleep();
     7 
     8 }
     9 
    10 
    11 //明星的实现类
    12 public class Star implements Person {
    13 
    14     @SuppressWarnings("unused")
    15     private Person p;
    16 
    17     public Star(Person p) {
    18         this.p = p;
    19     }
    20 
    21     @Override
    22     public void eat() {
    23         System.out.println("明星吃的是野菜~~~");
    24     }
    25 
    26     @Override
    27     public void sleep() {
    28         System.out.println("上床数星星~~~");
    29     }
    30 
    31 }
    32 
    33 //工人实现类
    34 public class Worker implements Person {
    35 
    36     @Override
    37     public void eat() {
    38         System.out.println("工人吃一顿山珍海味~~~然后吃一个月的土~~~");
    39     }
    40 
    41     @Override
    42     public void sleep() {
    43         System.out.println("上床数星星~~~");
    44     }
    45 
    46 }
    47 
    48 //将工人进行包装变成明星,但本质上工人还是工人
    49 public class PersonDemo {
    50 
    51     public static void main(String[] args) {
    52 
    53         Worker p = new Worker();
    54 
    55         p.eat();
    56 
    57         Star s = new Star(p);
    58 
    59         s.eat();
    60 
    61         p.eat();
    62 
    63     }
    64 
    65 }
  • 相关阅读:
    HTTP的KeepAlive是开启还是关闭?
    JS中关于in运算符的问题
    关于jQuery的inArray 方法介绍
    JS中括号的用法
    关于js中for in的缺陷浅析
    Ajax datatype:'JSON'的error问题Status1:200,JSON格式
    windows 如何查看端口占用情况?
    确认过眼神,看清 HTTP 协议
    高考完?入门级的开源项目带你开启编程之旅
    MongoDB入门系列(四):权限管理
  • 原文地址:https://www.cnblogs.com/tongxuping/p/6832518.html
Copyright © 2020-2023  润新知