装饰(Decorator)模式

本文详细介绍了装饰模式的概念及其在Java中的应用。装饰模式是一种用于在不改变对象结构的情况下动态地给对象添加新的职责的设计模式。文章通过示例代码展示了如何利用装饰模式为对象添加额外功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装饰(Decorator)模式:也叫包装模式,Adaptor模式也可以叫包装模式,不过有本质的区别,Adaptor模式没有使原有功能增强 
Decorator模式使原有功能增强,而且不是通过子类来实现功能增强的。 

装饰模式主要特色: 

1.用来扩展特定 对象 的功能, 不是扩充某个类的功能 。 
2.不需要子类,防止由于子类而导致的复杂和混乱 
3.对于一个给定的对象,同事可能有不同的装饰对象,客户端可以通过它的需要选择合适的装饰对象 

java.io包下类大量使用到装饰模式。 

装饰模式主要角色 
1.抽象构件角色:给出一个抽象接口,以规范准备接受附加责任的对象 
2.具体构件角色:定义一个将要接收附加责任的类 
3.装饰角色: 持有一个构件对象的实例 ,并定义一个与抽象构件接口一致的接口 
4.具体装饰角色:负责给构件对象"贴上"附加的责任 


Java代码   收藏代码
  1. package com.pattern.decorator;  
  2. /** 
  3.  * 抽象构件角色 
  4.  */  
  5. public interface Component {  
  6.   
  7.     public void doSomething();  
  8. }  

Java代码   收藏代码
  1. package com.pattern.decorator;  
  2. /** 
  3.  * 具体构件角色 
  4.  */  
  5. public class ConcreteComponent implements Component {  
  6.   
  7.     public void doSomething() {  
  8.         System.out.println("功能A");  
  9.     }  
  10.   
  11. }  

Java代码   收藏代码
  1. package com.pattern.decorator;  
  2. /** 
  3.  * 装饰角色 
  4.  */  
  5. public class Decorator implements Component {  
  6.     //拥有一个抽象构件对象  
  7.     private Component component;  
  8.     public Decorator(Component component){  
  9.         this.component = component;  
  10.     }  
  11.     public void doSomething() {  
  12.         component.doSomething();  
  13.     }  
  14.   
  15. }  

Java代码   收藏代码
  1. package com.pattern.decorator;  
  2. /** 
  3.  * 具体装饰角色一 
  4.  */  
  5. public class ConcreteDecorator1 extends Decorator {  
  6.   
  7.     public ConcreteDecorator1(Component component){  
  8.         super(component);  
  9.     }  
  10.       
  11.     public void doSomething(){  
  12.         super.doSomething();  
  13.         this.doAnotherthing();  
  14.           
  15.     }  
  16.     private void doAnotherthing(){  
  17.         System.out.println("功能B");  
  18.     }  
  19. }  

Java代码   收藏代码
  1. package com.pattern.decorator;  
  2. /** 
  3.  * 具体装饰角色二 
  4.  */  
  5. public class ConcreteDecorator2 extends Decorator {  
  6.   
  7.     public ConcreteDecorator2(Component component){  
  8.         super(component);  
  9.     }  
  10.       
  11.     public void doSomething(){  
  12.         super.doSomething();  
  13.         this.doAnotherthing();  
  14.           
  15.     }  
  16.     private void doAnotherthing(){  
  17.         System.out.println("功能C");  
  18.     }  
  19. }  

Java代码   收藏代码
  1. package com.pattern.decorator;  
  2. /** 
  3.  * 客户端 
  4.  */  
  5. public class Client {  
  6.       
  7.     public static void main(String[] args){  
  8.    //扩充了component 对象的功能。  
  9.         Component component = new ConcreteDecorator2(new ConcreteDecorator1(new ConcreteComponent()));  
  10.         component.doSomething();  
  11.     }  
  12. }  


运行结果: 
功能A 
功能B 
功能C 
资源下载链接为: https://pan.quark.cn/s/9648a1f24758 MySQL SSH隧道连接是一种安全的远程访问MySQL数据库的方式,尤其适用于无法直接远程访问MySQL服务器的场景。通过SSH协议建立安全通道,将本地网络连接转发至远程服务器,从而实现本地对远程数据库的访问,就如同访问本地MySQL服务一样。 如果之前为root用户分配了远程访问权限,出于安全考虑,可以按照以下步骤收回权限: 登录MySQL服务器:mysql -uroot -p。 查看当前用户的远程访问权限:select user, host from mysql.user;。 删除不必要的远程访问权限(例如限制root用户从所有主机访问):delete from mysql.user where user='root' and host='%';。 刷新权限以应用更改:flush privileges;。 再次查询,确认root用户已无法从任何远程主机登录。 接下来,需要建立SSH隧道。通常使用SSH客户端(如OpenSSH)连接到远程服务器,并通过RSA密钥对进行身份验证,这是一种更安全的认证方式。如果本地尚未生成RSA密钥对,需要先生成密钥对,并将公钥(id_rsa.pub)添加到远程服务器的~/.ssh/authorized_keys文件中。建立SSH隧道的命令如下(需替换为实际的IP地址和端口号): 参数含义如下: -N:仅建立隧道,不执行远程命令。 -C:启用压缩(可选)。 -P:使用非特权端口。 -f:建立隧道后在后台运行。 [email protected]:SSH用户名和目标服务器IP。 -L 3388:127.0.0.1:3306:将本地端口3388映射到远程服务器的MySQL端口3306。 之后,可以使用本地MySQL客户端工具(如MySQL Workben
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值