博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模式4. 装饰模式-Java
阅读量:4034 次
发布时间:2019-05-24

本文共 2177 字,大约阅读时间需要 7 分钟。

装饰模式

  • 将需要的功能按照正确的顺序串联起来进行控制。

1.定义

动态的给对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。

  • 是为已经存在的功能再动态添加更多功能的一种方式。

在这里插入图片描述

2.应用场合

应用在系统需要新的功能的时候。

  • 传统的方式是在原有的类中添加功能代码,装饰原有类的核心职责。但是会增加类的复杂度。对于那些仅在特殊场合用的功能,这种方式就显得比较笨重。
  • 装饰模式提供了一种更好的解决方式,将装饰功能作为一个单独的类,并且让这个类去包装他要装饰的类。此时,我们就可以在不同的场合,按照需要按照某种特定的顺序使用具有装饰功能的类来装饰我们的对象。
  • 简而言之,把类中的装饰功能,从类中搬出去,从而实现简化原有的类。有效的把类的核心职责与装饰功能区分离,并且可以去除相关类中重复的装饰逻辑。
  • 装饰顺序很重要,要保证装饰类之间的相互独立。

3.代码

3.1要装饰的对象接口,一个抽象类

package clt.decorator.ordinary;//对象接口,可以为这些类动态添加职责public abstract  class Component {
public abstract void Operation();}

3.2要具体进行装饰的对象,继承上边的对象接口

package clt.decorator.ordinary;//具体要装饰的对象public class ConcreteComponent extends Component {
@Override public vaoid Operation() {
System.out.println("这是具体要装饰的对象"); }}

3.3定义一个装饰父类,继承上边的对象接口

package clt.decorator.ordinary;public class Decorator extends  Component{
protected Component component; public void setComponent(Component component) {
this.component = component; } @Override public void Operation() {
if(component!=null){
//有具体的要装饰的对象,执行要装饰对象的核心职责 component.Operation(); } }}

3.4一个具体的装饰类A,继承上边的装饰类

package clt.decorator.ordinary;//具体要装饰的对象public class ConcreteComponent extends Component {
@Override public void Operation() {
System.out.println("这是具体要装饰的对象"); }}

3.5一个具体的装饰类B,继承上边的装饰类

package clt.decorator.ordinary;public class ConcreteDecoratorB extends  Decorator{
private String addstateB; //本类独有的功能,用于装饰对象 @Override public void Operation() {
super.Operation(); //首先运行核心职责 addstateB="装饰类B给对象添加装饰"; //再执行要装饰的功能 System.out.println("装饰类B给具体对象进行了进行了装饰"); }}

3.6客户端测试

package clt.decorator.ordinary;public class Client {
public static void main(String[] args) {
//声明对象 ConcreteComponent cc=new ConcreteComponent(); //具体要装饰的对象 ConcreteDeractorA da=new ConcreteDeractorA(); //装饰类A ConcreteDecoratorB db=new ConcreteDecoratorB(); //装饰类B //开始装饰 先用da装饰cc,再用db在最外层装饰da da.setComponent(cc); db.setComponent(da); db.Operation(); }}

3.7运行结果

这是具体要装饰的对象装饰类A给具体对象进行了进行了装饰装饰类B给具体对象进行了进行了装饰

转载地址:http://esfdi.baihongyu.com/

你可能感兴趣的文章
Python自动化之pytest框架使用详解
查看>>
【正则表达式】以个人的理解帮助大家认识正则表达式
查看>>
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
测试必会之 Linux 三剑客之 sed
查看>>
Socket请求XML客户端程序
查看>>
Java中数字转大写货币(支持到千亿)
查看>>
Java.nio
查看>>
函数模版类模版和偏特化泛化的总结
查看>>
VMware Workstation Pro虚拟机不可用解决方法
查看>>