- 浏览: 550723 次
- 性别:
- 来自: 杭州
-
文章分类
最新评论
-
wa114d:
楼主工作几年了,好厉害
一个面试官对面试问题的分析 -
wobuxiaole:
Good,非常好
30岁前男人需要完成的事 -
小逗逗:
Good,非常好
30岁前男人需要完成的事 -
invincibleLiu:
好帖,要顶!(别投我隐藏啊,这是对BBS最原始一种支持)
Java:synchronized修饰符在静态方法与非静态方法上的区别 -
fayedShih:
第三题,不知道对不对
import java.util.con ...
企业牛逼面试题目 高手进来讨论答题
3.3 平行的类层次结构
(1)什么是平行的类层次结构呢?
简单点说,假如有两个类层次结构,其中一个类层次中的每个类在另一个类层次中都有一个对应的类的结构,就被称为平行的类层次结构。
举个例子来说,硬盘对象有很多种,如分成台式机硬盘和笔记本硬盘,在台式机硬盘的具体实现上面,又有希捷、西数等不同品牌的实现,同样在笔记本硬盘上,也有希捷、日立、IBM等不同品牌的实现;硬盘对象具有自己的行为,如硬盘能存储数据,也能从硬盘上获取数据,不同的硬盘对象对应的行为对象是不一样的,因为不同的硬盘对象,它的行为的实现方式是不一样的。如果把硬盘对象和硬盘对象的行为分开描述,那么就构成了如图10所示的结构:
图10 平行的类层次结构示意图
硬盘对象是一个类层次,硬盘的行为这边也是一个类层次,而且两个类层次中的类是对应的。台式机西捷硬盘对象就对应着硬盘行为里面的台式机西捷硬盘的行为;笔记本IBM硬盘就对应着笔记本IBM硬盘的行为,这就是一种典型的平行的类层次结构。
这种平行的类层次结构用来干什么呢?主要用来把一个类层次中的某些行为分离出来,让类层次中的类把原本属于自己的职责,委托给分离出来的类去实现,从而使得类层次本身变得更简单,更容易扩展和复用。
一般来讲,分离出去的这些类的行为,会对应着类层次结构来组织,从而形成一个新的类层次结构,相当于原来对象的行为的这么一个类层次结构,而这个层次结构和原来的类层次结构是存在对应关系的,因此被称为平行的类层次结构。
(2)工厂方法模式跟平行的类层次结构有何关系呢?
可以使用工厂方法模式来连接平行的类层次。
看上面的示例图10,在每个硬盘对象里面,都有一个工厂方法createHDOperate,通过这个工厂方法,客户端就可以获取一个跟硬盘对象相对应的行为对象。在硬盘对象的子类里面,会覆盖父类的工厂方法createHDOperate,以提供跟自身相对应的行为对象,从而自然的把两个平行的类层次连接起来使用。
3.4 参数化工厂方法
所谓参数化工厂方法指的就是:通过给工厂方法传递参数,让工厂方法根据参数的不同来创建不同的产品对象,这种情况就被称为参数化工厂方法。当然工厂方法创建的不同的产品必须是同一个Product类型的。
来改造前面的示例,现在有一个工厂方法来创建ExportFileApi这个产品的对象,但是ExportFileApi接口的具体实现很多,为了方便创建的选择,直接从客户端传入一个参数,这样在需要创建ExportFileApi对象的时候,就把这个参数传递给工厂方法,让工厂方法来实例化具体的ExportFileApi实现对象。
还是看看代码示例会比较清楚。
(1)先来看Product的接口,就是ExportFileApi接口,跟前面的示例没有任何变化,为了方便大家查看,这里重复一下,示例代码如下:
(2)同样提供保存成文本文件和保存成数据库备份文件的实现,跟前面的示例没有任何变化,示例代码如下:
(3)接下来该看看ExportOperate类了,这个类的变化大致如下:
•ExportOperate类中的创建产品的工厂方法,通常需要提供默认的实现,不抽象了,也就是变成正常方法
•ExportOperate类也不再定义成抽象类了,因为有了默认的实现,客户端可能需要直接使用这个对象
•设置一个导出类型的参数,通过export方法从客户端传入
看看代码吧,示例代码如下:
(4)此时的客户端,非常简单,直接使用ExportOperate类,示例代码如下:
测试看看,然后修改一下客户端的参数,体会一下通过参数来选择具体的导出实现的过程。这是一种很常见的参数化工厂方法的实现方式,但是也还是有把参数化工厂方法实现成为抽象的,这点要注意,并不是说参数化工厂方法就不能实现成为抽象类了。只是一般情况下,参数化工厂方法,在父类都会提供默认的实现。
(5)扩展新的实现
使用参数化工厂方法,扩展起来会非常容易,已有的代码都不会改变,只要新加入一个子类来提供新的工厂方法实现,然后在客户端使用这个新的子类即可。
这种实现方式还有一个有意思的功能,就是子类可以选择性覆盖,不想覆盖的功能还可以返回去让父类来实现,很有意思。
先扩展一个导出成xml文件的实现,试试看,示例代码如下:
然后扩展ExportOperate类,来加入新的实现,示例代码如下:
看看此时的客户端,也非常简单,只是在变换传入的参数,示例代码如下:
对应的测试结果如下:
通过上面的示例,好好体会一下参数化工厂方法的实现和带来的好处。
3.5 工厂方法模式的优缺点
•可以在不知具体实现的情况下编程
工厂方法模式可以让你在实现功能的时候,如果需要某个产品对象,只需要使用产品的接口即可,而无需关心具体的实现。选择具体实现的任务延迟到子类去完成。
•更容易扩展对象的新版本
工厂方法给子类提供了一个挂钩,使得扩展新的对象版本变得非常容易。比如上面示例的参数化工厂方法实现中,扩展一个新的导出Xml文件格式的实现,已有的代码都不会改变,只要新加入一个子类来提供新的工厂方法实现,然后在客户端使用这个新的子类即可。
另外这里提到的挂钩,就是我们经常说的钩子方法(hook),这个会在后面讲模板方法模式的时候详细点说明。
•连接平行的类层次
工厂方法除了创造产品对象外,在连接平行的类层次上也大显身手。这个在前面已经详细讲述了。
•具体产品对象和工厂方法的耦合性
在工厂方法模式里面,工厂方法是需要创建产品对象的,也就是需要选择具体的产品对象,并创建它们的实例,因此具体产品对象和工厂方法是耦合的。
3.6 思考工厂方法模式
1:工厂方法模式的本质
工厂方法模式的本质:延迟到子类来选择实现。
仔细体会前面的示例,你会发现,工厂方法模式中的工厂方法,在真正实现的时候,一般是先选择具体使用哪一个具体的产品实现对象,然后创建这个具体产品对象的示例,然后就可以返回去了。也就是说,工厂方法本身并不会去实现产品接口,具体的产品实现是已经写好了的,工厂方法只要去选择实现就好了。
有些朋友可能会说,这不是跟简单工厂一样吗?
确实从本质上讲,它们是非常类似的,具体实现上都是在“选择实现”。但是也存在不同点,简单工厂是直接在工厂类里面进行“选择实现”;而工厂方法会把这个工作延迟到子类来实现,工厂类里面使用工厂方法的地方是依赖于抽象而不是具体的实现,从而使得系统更加灵活,具有更好的可维护性和可扩展性。
其实如果把工厂模式中的Creator退化一下,只提供工厂方法,而且这些工厂方法还都提供默认的实现,那不就变成了简单工厂了吗?比如把刚才示范参数化工厂方法的例子代码拿过来再简化一下,你就能看出来,写得跟简单工厂是差不多的,示例代码如下:
看完上述代码,会体会到简单工厂和工厂方法模式是有很大相似性的了吧,从某个角度来讲,可以认为简单工厂就是工厂方法模式的一种特例,因此它们的本质是类似的,也就不足为奇了。
2:对设计原则的体现
工厂方法模式很好的体现了“依赖倒置原则”。
依赖倒置原则告诉我们“要依赖抽象,不要依赖于具体类”,简单点说就是:不能让高层组件依赖于低层组件,而且不管高层组件还是低层组件,都应该依赖于抽象。
比如前面的示例,实现客户端请求操作的ExportOperate就是高层组件;而具体实现数据导出的对象就是低层组件,比如ExportTxtFile、ExportDB;而ExportFileApi接口就相当于是那个抽象。
对于ExportOperate来说,它不关心具体的实现方式,它只是“面向接口编程”;对于具体的实现来说,它只关心自己“如何实现接口”所要求的功能。
那么倒置的是什么呢?倒置的是这个接口的“所有权”。事实上,ExportFileApi接口中定义的功能,都是由高层组件ExportOperate来提出的要求,也就是说接口中的功能,是高层组件需要的功能。但是高层组件只是提出要求,并不关心如何实现,而低层组件,就是来真正实现高层组件所要求的接口功能的。因此看起来,低层实现的接口的所有权并不在底层组件手中,而是倒置到高层组件去了。
3:何时选用工厂方法模式
建议在如下情况中,选用工厂方法模式:
•如果一个类需要创建某个接口的对象,但是又不知道具体的实现,这种情况可以选用工厂方法模式,把创建对象的工作延迟到子类去实现
•如果一个类本身就希望,由它的子类来创建所需的对象的时候,应该使用工厂方法模式
3.7 相关模式
•工厂方法模式和抽象工厂模式
这两个模式可以组合使用,具体的放到抽象工厂模式中去讲。
•工厂方法模式和模板方法模式
这两个模式外观类似,都是有一个抽象类,然后由子类来提供一些实现,但是工厂方法模式的子类专注的是创建产品对象,而模板方法模式的子类专注的是为固定的算法骨架提供某些步骤的实现。
这两个模式可以组合使用,通常在模板方法模式里面,使用工厂方法来创建模板方法需要的对象。
工厂方法模式结束,谢谢观看!
(1)什么是平行的类层次结构呢?
简单点说,假如有两个类层次结构,其中一个类层次中的每个类在另一个类层次中都有一个对应的类的结构,就被称为平行的类层次结构。
举个例子来说,硬盘对象有很多种,如分成台式机硬盘和笔记本硬盘,在台式机硬盘的具体实现上面,又有希捷、西数等不同品牌的实现,同样在笔记本硬盘上,也有希捷、日立、IBM等不同品牌的实现;硬盘对象具有自己的行为,如硬盘能存储数据,也能从硬盘上获取数据,不同的硬盘对象对应的行为对象是不一样的,因为不同的硬盘对象,它的行为的实现方式是不一样的。如果把硬盘对象和硬盘对象的行为分开描述,那么就构成了如图10所示的结构:

图10 平行的类层次结构示意图
硬盘对象是一个类层次,硬盘的行为这边也是一个类层次,而且两个类层次中的类是对应的。台式机西捷硬盘对象就对应着硬盘行为里面的台式机西捷硬盘的行为;笔记本IBM硬盘就对应着笔记本IBM硬盘的行为,这就是一种典型的平行的类层次结构。
这种平行的类层次结构用来干什么呢?主要用来把一个类层次中的某些行为分离出来,让类层次中的类把原本属于自己的职责,委托给分离出来的类去实现,从而使得类层次本身变得更简单,更容易扩展和复用。
一般来讲,分离出去的这些类的行为,会对应着类层次结构来组织,从而形成一个新的类层次结构,相当于原来对象的行为的这么一个类层次结构,而这个层次结构和原来的类层次结构是存在对应关系的,因此被称为平行的类层次结构。
(2)工厂方法模式跟平行的类层次结构有何关系呢?
可以使用工厂方法模式来连接平行的类层次。
看上面的示例图10,在每个硬盘对象里面,都有一个工厂方法createHDOperate,通过这个工厂方法,客户端就可以获取一个跟硬盘对象相对应的行为对象。在硬盘对象的子类里面,会覆盖父类的工厂方法createHDOperate,以提供跟自身相对应的行为对象,从而自然的把两个平行的类层次连接起来使用。
3.4 参数化工厂方法
所谓参数化工厂方法指的就是:通过给工厂方法传递参数,让工厂方法根据参数的不同来创建不同的产品对象,这种情况就被称为参数化工厂方法。当然工厂方法创建的不同的产品必须是同一个Product类型的。
来改造前面的示例,现在有一个工厂方法来创建ExportFileApi这个产品的对象,但是ExportFileApi接口的具体实现很多,为了方便创建的选择,直接从客户端传入一个参数,这样在需要创建ExportFileApi对象的时候,就把这个参数传递给工厂方法,让工厂方法来实例化具体的ExportFileApi实现对象。
还是看看代码示例会比较清楚。
(1)先来看Product的接口,就是ExportFileApi接口,跟前面的示例没有任何变化,为了方便大家查看,这里重复一下,示例代码如下:
/** * 导出的文件对象的接口 */ public interface ExportFileApi { /** * 导出内容成为文件 * @param data 示意:需要保存的数据 * @return 是否导出成功 */ public boolean export(String data); }
(2)同样提供保存成文本文件和保存成数据库备份文件的实现,跟前面的示例没有任何变化,示例代码如下:
public class ExportTxtFile implements ExportFileApi{ public boolean export(String data) { //简单示意一下,这里需要操作文件 System.out.println("导出数据"+data+"到文本文件"); return true; } } public class ExportDB implements ExportFileApi{ public boolean export(String data) { //简单示意一下,这里需要操作数据库和文件 System.out.println("导出数据"+data+"到数据库备份文件"); return true; } }
(3)接下来该看看ExportOperate类了,这个类的变化大致如下:
•ExportOperate类中的创建产品的工厂方法,通常需要提供默认的实现,不抽象了,也就是变成正常方法
•ExportOperate类也不再定义成抽象类了,因为有了默认的实现,客户端可能需要直接使用这个对象
•设置一个导出类型的参数,通过export方法从客户端传入
看看代码吧,示例代码如下:
/** * 实现导出数据的业务功能对象 */ public class ExportOperate { /** * 导出文件 * @param type 用户选择的导出类型 * @param data 需要保存的数据 * @return 是否成功导出文件 */ public boolean export(int type,String data){ //使用工厂方法 ExportFileApi api = factoryMethod(type); return api.export(data); } /** * 工厂方法,创建导出的文件对象的接口对象 * @param type 用户选择的导出类型 * @return 导出的文件对象的接口对象 */ protected ExportFileApi factoryMethod(int type){ ExportFileApi api = null; //根据类型来选择究竟要创建哪一种导出文件对象 if(type==1){ api = new ExportTxtFile(); }else if(type==2){ api = new ExportDB(); } return api; } }
(4)此时的客户端,非常简单,直接使用ExportOperate类,示例代码如下:
public class Client { public static void main(String[] args) { //创建需要使用的Creator对象 ExportOperate operate = new ExportOperate(); //调用输出数据的功能方法,传入选择到处类型的参数 operate.export(1,"测试数据"); } }
测试看看,然后修改一下客户端的参数,体会一下通过参数来选择具体的导出实现的过程。这是一种很常见的参数化工厂方法的实现方式,但是也还是有把参数化工厂方法实现成为抽象的,这点要注意,并不是说参数化工厂方法就不能实现成为抽象类了。只是一般情况下,参数化工厂方法,在父类都会提供默认的实现。
(5)扩展新的实现
使用参数化工厂方法,扩展起来会非常容易,已有的代码都不会改变,只要新加入一个子类来提供新的工厂方法实现,然后在客户端使用这个新的子类即可。
这种实现方式还有一个有意思的功能,就是子类可以选择性覆盖,不想覆盖的功能还可以返回去让父类来实现,很有意思。
先扩展一个导出成xml文件的实现,试试看,示例代码如下:
/** * 导出成xml文件的对象 */ public class ExportXml implements ExportFileApi{ public boolean export(String data) { //简单示意一下 System.out.println("导出数据"+data+"到XML文件"); return true; } }
然后扩展ExportOperate类,来加入新的实现,示例代码如下:
/** * 扩展ExportOperate对象,加入可以导出XML文件 */ public class ExportOperate2 extends ExportOperate{ /** * 覆盖父类的工厂方法,创建导出的文件对象的接口对象 * @param type 用户选择的导出类型 * @return 导出的文件对象的接口对象 */ protected ExportFileApi factoryMethod(int type){ ExportFileApi api = null; //可以全部覆盖,也可以选择自己感兴趣的覆盖, //这里只想添加自己新的实现,其它的不管 if(type==3){ api = new ExportXml(); }else{ //其它的还是让父类来实现 api = super.factoryMethod(type); } return api; } }
看看此时的客户端,也非常简单,只是在变换传入的参数,示例代码如下:
public class Client { public static void main(String[] args) { //创建需要使用的Creator对象 ExportOperate operate = new ExportOperate2(); //下面变换传入的参数来测试参数化工厂方法 operate.export(1,"Test1"); operate.export(2,"Test2"); operate.export(3,"Test3"); } }
对应的测试结果如下:
导出数据Test1到文本文件 导出数据Test2到数据库备份文件 导出数据Test3到XML文件
通过上面的示例,好好体会一下参数化工厂方法的实现和带来的好处。
3.5 工厂方法模式的优缺点
•可以在不知具体实现的情况下编程
工厂方法模式可以让你在实现功能的时候,如果需要某个产品对象,只需要使用产品的接口即可,而无需关心具体的实现。选择具体实现的任务延迟到子类去完成。
•更容易扩展对象的新版本
工厂方法给子类提供了一个挂钩,使得扩展新的对象版本变得非常容易。比如上面示例的参数化工厂方法实现中,扩展一个新的导出Xml文件格式的实现,已有的代码都不会改变,只要新加入一个子类来提供新的工厂方法实现,然后在客户端使用这个新的子类即可。
另外这里提到的挂钩,就是我们经常说的钩子方法(hook),这个会在后面讲模板方法模式的时候详细点说明。
•连接平行的类层次
工厂方法除了创造产品对象外,在连接平行的类层次上也大显身手。这个在前面已经详细讲述了。
•具体产品对象和工厂方法的耦合性
在工厂方法模式里面,工厂方法是需要创建产品对象的,也就是需要选择具体的产品对象,并创建它们的实例,因此具体产品对象和工厂方法是耦合的。
3.6 思考工厂方法模式
1:工厂方法模式的本质
工厂方法模式的本质:延迟到子类来选择实现。
仔细体会前面的示例,你会发现,工厂方法模式中的工厂方法,在真正实现的时候,一般是先选择具体使用哪一个具体的产品实现对象,然后创建这个具体产品对象的示例,然后就可以返回去了。也就是说,工厂方法本身并不会去实现产品接口,具体的产品实现是已经写好了的,工厂方法只要去选择实现就好了。
有些朋友可能会说,这不是跟简单工厂一样吗?
确实从本质上讲,它们是非常类似的,具体实现上都是在“选择实现”。但是也存在不同点,简单工厂是直接在工厂类里面进行“选择实现”;而工厂方法会把这个工作延迟到子类来实现,工厂类里面使用工厂方法的地方是依赖于抽象而不是具体的实现,从而使得系统更加灵活,具有更好的可维护性和可扩展性。
其实如果把工厂模式中的Creator退化一下,只提供工厂方法,而且这些工厂方法还都提供默认的实现,那不就变成了简单工厂了吗?比如把刚才示范参数化工厂方法的例子代码拿过来再简化一下,你就能看出来,写得跟简单工厂是差不多的,示例代码如下:

看完上述代码,会体会到简单工厂和工厂方法模式是有很大相似性的了吧,从某个角度来讲,可以认为简单工厂就是工厂方法模式的一种特例,因此它们的本质是类似的,也就不足为奇了。
2:对设计原则的体现
工厂方法模式很好的体现了“依赖倒置原则”。
依赖倒置原则告诉我们“要依赖抽象,不要依赖于具体类”,简单点说就是:不能让高层组件依赖于低层组件,而且不管高层组件还是低层组件,都应该依赖于抽象。
比如前面的示例,实现客户端请求操作的ExportOperate就是高层组件;而具体实现数据导出的对象就是低层组件,比如ExportTxtFile、ExportDB;而ExportFileApi接口就相当于是那个抽象。
对于ExportOperate来说,它不关心具体的实现方式,它只是“面向接口编程”;对于具体的实现来说,它只关心自己“如何实现接口”所要求的功能。
那么倒置的是什么呢?倒置的是这个接口的“所有权”。事实上,ExportFileApi接口中定义的功能,都是由高层组件ExportOperate来提出的要求,也就是说接口中的功能,是高层组件需要的功能。但是高层组件只是提出要求,并不关心如何实现,而低层组件,就是来真正实现高层组件所要求的接口功能的。因此看起来,低层实现的接口的所有权并不在底层组件手中,而是倒置到高层组件去了。
3:何时选用工厂方法模式
建议在如下情况中,选用工厂方法模式:
•如果一个类需要创建某个接口的对象,但是又不知道具体的实现,这种情况可以选用工厂方法模式,把创建对象的工作延迟到子类去实现
•如果一个类本身就希望,由它的子类来创建所需的对象的时候,应该使用工厂方法模式
3.7 相关模式
•工厂方法模式和抽象工厂模式
这两个模式可以组合使用,具体的放到抽象工厂模式中去讲。
•工厂方法模式和模板方法模式
这两个模式外观类似,都是有一个抽象类,然后由子类来提供一些实现,但是工厂方法模式的子类专注的是创建产品对象,而模板方法模式的子类专注的是为固定的算法骨架提供某些步骤的实现。
这两个模式可以组合使用,通常在模板方法模式里面,使用工厂方法来创建模板方法需要的对象。
工厂方法模式结束,谢谢观看!
发表评论
-
对于单例模式的一点想法
2011-03-04 11:12 944单例模式很普遍,对于S ... -
研磨设计模式之抽象工厂模式-1
2010-10-28 13:46 1027抽象工厂模式(Abstract F ... -
研磨设计模式之命令模式-1
2010-09-14 09:29 1038命令模式也是开发中常见的一个模式,也不是太难,比较简单,下面来 ... -
研磨设计模式之工厂方法模式-4
2010-09-13 14:17 753... -
研磨设计模式之工厂方法模式-3
2010-09-10 17:28 9033 模式讲解 3.1 认识工厂方法模式 (1)模式的功能 ... -
研磨设计模式之工厂方法模式-2
2010-09-08 10:30 11682 解决方案 2.1 工厂方法模式来解决 ... -
研磨设计模式之工厂方法模式-1(来自chjavach)
2010-09-08 10:20 1126做Java一晃就十年了,最 ... -
设计模式学习笔记(十二)—Builder建造者模式
2008-11-13 10:25 998Builder模式定义:将一个复杂对象的构建与它的表示分离, ... -
设计模式学习笔记(十一)—Prototype原型模式
2008-11-13 10:12 976Prototype模式的意图是: ... -
设计模式学习笔记(七)—Observer观察者模式
2008-11-13 09:47 965《设计模式》一书对Observer是这样描述的:定义对象间的一 ... -
设计模式学习笔记(六)—Decorator装饰模式
2008-11-12 17:04 918《设计模式》一书对Decorator是这样描述的: 动态地给一 ... -
设计模式学习笔记(五)—Abstract Factory抽象工厂模式
2008-11-12 16:47 940GOF《设计模式》一书对Abstract Factory模式是 ... -
设计模式学习笔记(四)—Bridge桥接模式
2008-11-12 16:40 960《设计模式》一书对Bridge是这样描述的: 将抽象与其实现解 ... -
设计模式学习笔记(三)—-Strategy策略模式
2008-11-12 16:17 1178GOF《设计模式》一书对Strategy模式是这样描述的: ... -
设计模式学习笔记(二)—-Adapter适配器模式
2008-11-12 15:50 1027GOF《设计模式》一书对Adapter模式是这样描述的: ... -
设计模式学习笔记(一)--Facade外观模式
2008-11-12 15:48 963GOF《设计模式》一书对Facade模式是这样描述的: ... -
设计模式学习笔记(十)—Factory Method模式
2008-11-12 15:25 1008《设计模式》一书对Factory Method模式是这样描述的 ... -
设计模式学习笔记(九)—Singleton模式
2008-11-12 15:22 912《设计模式》一书对Singleton模式是这样描述的:保证一个 ... -
设计模式学习笔记(八)—Template Method模式
2008-11-12 15:03 1105factory模式(包括简单工厂和抽象工厂),Strategy ...
相关推荐
中国人工智能产业发展联盟金融大模型落地路线图研究报告2024年56页.pdf
USB运动控制开源系统揭秘:五轴雕刻机核心技术全开源,支持RTCP算法,PCB生产便捷,C++源码可复制,USB运动控制五轴雕刻机系统完全开源资料,含PCB生产支持及多版本C++源码,USB运动控制 (五轴雕刻机系统)全部开源 不保留任何关键技术,PCB可直接生产,C++6.0源码,从13.7-18.2所有版本,本产品为可复制资料,支持五轴联动,支持RTCP算法,全部开源。 1、为电子资料 2、PCB底板+原理图+源码 ,核心关键词:USB运动控制; 五轴雕刻机系统; 开源技术; 不保留关键技术; C++6.0源码; 版本范围(13.7-18.2); 可复制资料; 五轴联动; RTCP算法; PCB底板; 原理图。,开源五轴雕刻机系统:USB运动控制全解析
系统选用B/S模式,后端应用springboot框架,前端应用vue框架, MySQL为后台数据库。 本系统基于java设计的各项功能,数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。 在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。
基于16QAM的SIMULINK与MATLAB联合仿真系统:调制解调波形分析与应用拓展,基于MATLAB和SIMULINK平台的16QAM调制与解调仿真研究及波形分析,16QAM SIMULINK 基于SIMULINK和MATLAB的16QAM调制和解调。 采用SIMULINK搭建框图,MATLAB调用模型得出波形图。 (可自行简单修改在SIMULINK中加scope,无须MATLAB调用) ,核心关键词: 16QAM; SIMULINK; MATLAB; 调制; 解调; 波形图; 框图; Scope,基于SIMULINK的16QAM调制解调系统研究
基于PMSM模型的四种控制策略对比研究:传统滑膜控制与扰动观测器的优化与应用,基于滑膜控制扰动观测器的PMSM模型:四控制策略对比分析与实践应用研究 [附带视频与出图程序],基于滑膜控制扰动观测器的永磁同步电机PMSM模型 四个控制对比: 1、PID控制器 2、传统滑模控制器 3、最优滑模控制器 4、改进补偿滑膜控制器 [1]附带简单讲解视频 如下图 [2]附带出图程序,四个控制对比的说明文档(2篇,非次品) ,核心关键词:滑膜控制; 扰动观测器; 永磁同步电机PMSM模型; PID控制器; 传统滑模控制器; 最优滑模控制器; 改进补偿滑膜控制器; 简单讲解视频; 出图程序; 对比说明文档。,PMSM模型下的滑膜控制:四法比拼,解析与可视化
Abaqus USDFLD子程序:实现积分点间材料弹性连续变化仿真的高效方法,Abaqus USDFLD子程序:实现积分点间材料弹性连续变化仿真的高效方法,Abaqus USDFLD子程序实现积分点间材料弹性连续变化仿真 ,Abaqus; USDFLD子程序; 积分点; 材料弹性; 连续变化仿真;,Abaqus USDFLD实现材料弹性连续变化仿真
内容概要:本文档为《早中期复习—数字信号处理》的学习指南,详细介绍了数字信号处理的相关概念和方法,旨在梳理并巩固相关领域的知识点。文档内容涵盖数字信号处理基本概念及时域离散信号和系统的分析方法;重点探讨时域离散信号、离散傅里叶变换及其快速算法(FFT);详细介绍了基于离散信号变换方法的不同类型滤波器的设计;此外还列举了部分经典的面试题目及其解答方向,以辅助备考者准备面试。文档有助于深入理解和掌握这一学科,提高对信号分析技能的认知和应用。 适合人群:本指南主要面向正在备战考试或从事相关工作的初学者,尤其是需要系统性复习并加强理论理解和实际操作技巧的学生和工程师。 使用场景及目标:可用于准备研究生入学面试或者作为工程师日常工作中处理复杂工程问题时的参考手册。目标是帮助使用者加深对数字信号处理的认识,掌握关键技术和应用场景,以便更好地应对学术和工业挑战。 其他说明:文档结构清晰、条理性强,配合大量例题和图示,有利于读者理解和记忆。同时,提供了实用的小贴士和思考题,引导读者积极思考,拓展视野,培养独立解决问题的能力。
题目2.5(模拟浏览器操作程序):标准Web浏览器具有在最近访问的网页间后退和前进的功能。实现这些功能的个方法是:使用两个栈,追踪可以后退和前进而能够到达的网页。
SensorTower2024年AI应用市场洞察报告31页.pdf
chromedriver-win32-136.0.7055.0.zip
COMSOL热流耦合拓扑优化:最大化放热量与功率耗散策略解析,Comsol热流耦合拓扑优化技术:以最大化放热量与功率耗散为目标函数的优化策略,Comsol热流耦合拓扑优化。 目标函数采用最大化放热量和功率耗散。 ,Comsol;热流耦合;拓扑优化;目标函数;最大化放热量;功率耗散,Comsol热流耦合优化:最大化放热与功率耗散
内容概要:本文介绍了将假肢测试与实时混合子结构(RTHS)方法相结合的技术背景。RTHS方法用于将完整的动态系统分解为数值部分(numerical part)和实验部分(experimental part),并在Simulink中进行建模。数值部分包括模拟截肢者的模型,而实验部分则涉及真实的机械臂和假肢。两者通过传输系统耦合,实现了步行阶段的动态交互。文章具体描述了不同步态阶段的动力学模拟流程,包括飞行阶段(抬脚离地)和接触阶段(脚触地)。为了实现有效的仿线,提出了对机械臂的四个关键要求:能够执行接口运动、承受界面力、低延迟高精度以及实现实时通信。 适合人群:从事生物力学、医疗器械和机器人技术研究的专业人士及科研人员。 使用场景及目标:适用于需要对假肢进行动态性能测试的研发机构或企业,目标是选择合适的机械臂并构建完整的假肢测试平台,提高仿线的准确性和可靠性。 阅读建议:重点理解和掌握RTHS方法的工作原理以及机械臂在仿真实验中的角色,在实践中注意验证机械臂是否符合所列出的各项要求。
FLUENT与MATLAB协同:基于UDP的复杂数据联合仿真计算与交互处理方案,FLUENT与MATLAB协同:基于UDP的复杂数据联合仿真处理系统,FLUENT与MATLAB联合仿真计算,基于UDP,可在MATLAB实现复杂数据计算处理。 提供两个软件数据交互方法和接口,FLUENT数据传递给MATLAB后,可以用任意方法处理,最后再回传给FLUENT处理后的数据。 本案例只是简单演示效果,可以实现复杂功能。 ,联合仿真计算; UDP接口通信; 数据处理; 交互方法; 回传数据; 复杂功能演示。,FLUENT与MATLAB协同:UDP接口数据交互与复杂处理
postgresql安装教程.md
IPMSM数学模型深度解析:双环模拟技术,预测电机对多样输入的响应,精准输出电流、转速与转矩,IPMSM模型分析电机响应,IPMSM数学模型,模拟电机对不同输入的响应,包含速度环和电流环,输出电流转速和转矩。 ,IPMSM数学模型; 电机响应模拟; 速度环和电流环; 输出电流转速和转矩; 电机控制,IPMSM模型模拟电机响应:双环控制下电流转速与转矩输出
基于CNN-RBF神经网络的优化数据分类预测模型——以交叉验证防止过拟合的Matlab代码实现,Matlab结合CNN-RBF进行数据分类优化,基于卷积神经网络结合径向基函数神经网络(CNN-RBF)的数据分类预测 CNN-RBF数据分类 优化参数为扩散速度,采用交叉验证防止过拟合 matlab代码 注:要求 Matlab 2019A 及以上版本 ,核心关键词: 卷积神经网络(CNN); 径向基函数神经网络(RBF); 数据分类预测; 优化参数; 扩散速度; 交叉验证; 过拟合; MATLAB代码 2019A以上版本,基于CNN-RBF的优化参数数据分类预测Matlab代码实现
多变量模式分析在脑电数据中的深度应用:从磁共振到时频域的神经表征研究,多变量模式分析在脑电数据中的深度应用:从磁共振到时频域的神经表征研究,多变量模式分析最早应用在磁共振数据中,用来考察某些脑区在编码不同条件的刺激时是否存在表征上的显著不同。 后来逐渐运用到脑电数据中,虽然脑电数据的空间分辨率较低,但时间分辨率很高,因此可以帮助确定在哪一段时间内,个体对不同条件刺激的表征有显著差异。 目前已经有很多工具箱支持脑电数据MVPA的分析,例如matlab中ADAM,python中的NeuroRA等(这两个相对来说比较好上手)。 方法共包括基础的时间序列解码,以及衍生方法跨时域解码与权重投射等。 MVPA不仅可以应用在原始时域数据上,也可以应用在时频域数据上,来观察不同频段的能量对于编码不同刺激过程中的贡献。 ,多变量模式分析(MVPA);磁共振数据;脑电数据;时间分辨率;工具箱支持;ADAM;NeuroRA;时间序列解码;跨时域解码;权重投射;时频域分析。,多变量模式分析在脑电数据中的应用:从磁共振到时频域的表征研究
更多毕业设计https://cv2022.blog.csdn.net/article/details/124463185
系统选用B/S模式,后端应用springboot框架,前端应用vue框架, MySQL为后台数据库。 本系统基于java设计的各项功能,数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。 在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。
内容概要:本文档详细介绍了基于单片机的点阵电子显示屏的设计与实现项目。项目涵盖从理论背景、项目目标、硬件设计、软件开发到最后的应用与未来扩展等多个方面。首先阐述了点阵显示屏的广泛应用和技术背景,接着定义了项目的具体目标,包括实现文字滚动、图像展示等功能,同时深入解析了硬件部分的选型和连接细节,如单片机(STM32)、LED点阵模块及其驱动电路。在软件部分,文中演示了I2C通信协议的代码示例,并展示了如何通过嵌入式编程控制显示屏的效果,如显示固定字符、实现文字滚动等。此外,文章还讨论了调试和优化的方法论及注意事项,最后对未来发展方向提出了展望,如多显示屏协同、触摸屏输入的支持等。 适合人群:从事嵌入式系统开发的专业技术人员、电子工程专业的大学生及研究人员。 使用场景及目标:①嵌入式系统开发课程的案例研究;②工业设计公司或科研单位的项目参考;③高校实验室开展相关课题的研究资料。 阅读建议:对于初次接触嵌入式开发的新手,建议先掌握基础知识,熟悉所使用的单片机型及其外设接口功能后再开始本项目的学习;而对于有经验的研发人员,则可以重点关注具体的实现技术和遇到问题时的解决方案部分,结合自身需求进行灵活运用。