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

    装饰者设计模式

    装饰者设计模式:如果想对已经存在的对象进行装饰,那么就定义一个类,在类中对已经有的对象进行功能的增强或添加另外的行为,这个类就叫装饰者类。被修饰的类叫被装饰者类,是已经存在有的功能。在装饰者类之间又可以互相装饰

    特点:
              1.装饰类通过构造方法来接收被装饰者的对象,调用它里面的功能或行为
              2. 基于对被装饰对象的功能进行扩展,提供更强大的功能

    举例:

    假设有一个接口IWaiter(或者父类):

    1 public interface IWaiter {
    2     void service();
    3 }

    具体实现类(或者子类)为Waitress类:

    1 public class Waitress implements IWaiter{
    2 
    3     @Override
    4     public void service() {
    5         // TODO Auto-generated method stub
    6         System.out.println("在服务。。。。");
    7     }
    8     
    9 }

    现在想对Waitress的service方法进行扩展。

    定义一个WaitressWrap类(包装类),实现接口(或者继承父类)IWaiter:

     1 public class WaitressWrap implements IWaiter{
     2     IWaiter waiter=null;
     3     //定义构造方法来接收被装饰者的对象
     4     public WaitressWrap(IWaiter waiter) {
     5         this.waiter=waiter;
     6     }
     7     //重写service方法
     8     @Override
     9     public void service() {
    10         // TODO Auto-generated method stub
    11         System.out.println("微笑");
    12         waiter.service();
    13         
    14     }
    15 }

     

     装饰者设计模式减少了继承体系的臃肿(如果用继承重写的方式,会派生出很多子类),增加了功能,比继承更灵活。装饰类和被装饰类必须所属于同一个体系,通常装饰类都会提供构造函数接收被装饰类对象。

     

  • 相关阅读:
    [MySQL] 怎样使用Mysqlcheck来检查和修复, 优化表
    MySQL 5.6 & 5.7最优配置文件模板
    mysql5.6配置详解
    mysql 复制数据库
    mysql-binlog日志恢复数据库
    Memory Analyzer Tool定位Java heap space内存泄漏
    MySQL Flashback 闪回功能详解
    DisJSet:食物链(POJ 1182)
    BFS:Meteor Shower(POJ 3669)
    DFS:Curling 2.0(POJ 3009)
  • 原文地址:https://www.cnblogs.com/hopeyes/p/9685734.html
Copyright © 2011-2022 走看看