装饰者模式

装饰者模式:

在不改变原类文件和使用继承的情况下,动态的扩展一个对象的功能,即通过创建一个包装对象,来包裹真实的对象

特点:

1.装饰对象和真实对象有相同的接口,这样,客户端对象就可以以和真实对象相同的方式和装饰对象交互(装饰类与被装饰类有相同的借口或者抽象父类,装饰类与接口之间有一个中间件)

2.真实对象包含一个真实对象的引用。

3.装饰对象接受所有来自客户端的请求,并把这些请求转发给真实的对象

4.装饰对象可以在转发这些请求以前或者以后增加一些附加功能

设计原则:

1.封装变化部分

2.开-闭原则(不去修改被装饰的类,新建一个装饰类,满足新的功能)

3.面向抽象编程,不要面向实现编程,能够起到很好的接口隔离作用

4.优先使用对象组合,而非类继承

使用场合

1.当我们需要为某个现有的对象动态的增加一个新的功能或者职责时

2.当某个对象的职责经常发生变化或者经常需要动态的增加职责。

装饰着模式中的角色


1.被装饰者抽象 ,是一个接口或者抽象类。在装饰着模式中,必然有一个被提取出来最核心,最原始的类(上图componet类)

2.被装饰者具体实现,即程序中已经实现的类,

3.装饰者,一般是一个抽象类(中间件的概念),实现接口或者抽象的方法。里面必然有一个指向component的引用

4.装饰者实现类,通过调用装饰者中的引用,调用到被装饰者中的相应方法

java sdk 相关设计模式


相关设计模式

1.适配器模式:装饰者模式是在不改变原内容的基础上,动态地增加新的行为;而适配器模式则主要用来填补两个接口之间的差异

2.策略模式:策略模式是以切换运算法则的方式变换功能

demo:

1.被装饰者抽象 IBread

public interface IBread {

// 准备材料

public void prepair();


// 和 面

public void kneadFlour();


// 蒸馒头

public void steamed();


// 加工馒头

public void process();


}

2.被装饰者实现 normalBread

public class normalBreadimplements IBread {


@Override

public void prepair() {

System.out.println("准备材料");

// TODO Auto-generated method stub


}


@Override

public void kneadFlour() {

System.out.println("和面");

// TODO Auto-generated method stub


}


@Override

public void steamed() {

System.out.println("蒸馒头了");

// TODO Auto-generated method stub


}


@Override

public void process() {

prepair();

kneadFlour();

steamed();

// TODO Auto-generated method stub

}

}


3.装饰者 AbstractBread,里面包含了被装饰者抽象引用

public class AbstractBreadimplements IBread {


public AbstractBread(IBread iBread) {

super();

this.iBread = iBread;

}


private IBreadiBread;//被装饰对象的引用


@Override

public void prepair() {

this.iBread.prepair();

// TODO Auto-generated method stub


}


@Override

public void kneadFlour() {

this.iBread.kneadFlour();

// TODO Auto-generated method stub


}


@Override

public void steamed() {

this.iBread.steamed();

// TODO Auto-generated method stub


}


@Override

public void process() {

//此处是关键

prepair();

kneadFlour();

steamed();

// this.iBread.process();

// TODO Auto-generated method stub


}

}

4.装饰者 实现(cronBread) 添加玉米素

public class cronBreadextends AbstractBread {


public cronBread(IBread iBread) {

super(iBread);

// TODO Auto-generated constructor stub

}

// 被装饰的方法

public void paint() {

System.out.println("添加柠檬黄着色剂...");

}

@Override

public void kneadFlour() {

paint();// 在和面前添加染色剂

super.kneadFlour();

// TODO Auto-generated method stub

}}

5.装饰者实现(sweetBread) 添加甜蜜素

public class sweetBreadextends AbstractBread {


public sweetBread(IBread iBread) {

super(iBread);

// TODO Auto-generated constructor stub

}


public void paint() {

System.out.println("添加甜蜜素");

}


@Override

public void kneadFlour() {

paint();

super.kneadFlour();

// TODO Auto-generated method stub


}


}

6.测试类

IBread normal = new normalBread();

normal=new cronBread(normal);

normal=new sweetBread(normal);

normal.process();








基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性和先进性。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值