第2章设计模式七大原则喵喵巫

编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件)具有更好:

设计模式包含了面向对象的精髓,“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要”

设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据)。

设计模式常用的七大原则有:

对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。

交通工具案例

方案1

packagecom.atguigu.principle.singleresponsibility;publicclassSingleResponsibility1{ publicstaticvoidmain(String[]args){ Vehiclevehicle=newVehicle(); vehicle.run("摩托车"); vehicle.run("汽车"); vehicle.run("飞机");//(有误)飞机在公路上运行.... }}classVehicle{ publicvoidrun(Stringvehicle){ System.out.println(vehicle+"在公路上运行...."); }}方案2

packagecom.atguigu.principle.singleresponsibility;publicclassSingleResponsibility2{ publicstaticvoidmain(String[]args){ RoadVehicleroadVehicle=newRoadVehicle(); roadVehicle.run("摩托车"); roadVehicle.run("汽车"); AirVehicleairVehicle=newAirVehicle(); airVehicle.run("飞机"); }}classRoadVehicle{ publicvoidrun(Stringvehicle){ System.out.println(vehicle+"公路运行"); }}classAirVehicle{ publicvoidrun(Stringvehicle){ System.out.println(vehicle+"天空运行"); }}classWaterVehicle{ publicvoidrun(Stringvehicle){ System.out.println(vehicle+"水中运行"); }}方案3

packagecom.atguigu.principle.singleresponsibility;publicclassSingleResponsibility3{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Vehicle2vehicle2=newVehicle2(); vehicle2.run("汽车"); vehicle2.runWater("轮船"); vehicle2.runAir("飞机"); }}classVehicle2{ publicvoidrun(Stringvehicle){ System.out.println(vehicle+"在公路上运行...."); } publicvoidrunAir(Stringvehicle){ System.out.println(vehicle+"在天空上运行...."); } publicvoidrunWater(Stringvehicle){ System.out.println(vehicle+"在水中行...."); }}2.3.3单一职责原则注意事项和细节2.4接口隔离原则(InterfaceSegregationPrinciple)2.4.1基本介绍客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。

类图:

packagecom.atguigu.principle.segregation;publicclassSegregation1{

publicstaticvoidmain(String[]args){}}

//接口interfaceInterface1{

voidoperation1();voidoperation2();voidoperation3();voidoperation4();voidoperation5();}

classBimplementsInterface1{

@Overridepublicvoidoperation1(){System.out.println("B实现了operation1");}@Overridepublicvoidoperation2(){System.out.println("B实现了operation2");}@Overridepublicvoidoperation3(){System.out.println("B实现了operation3");}@Overridepublicvoidoperation4(){System.out.println("B实现了operation4");}@Overridepublicvoidoperation5(){System.out.println("B实现了operation5");}}

classDimplementsInterface1{

@Overridepublicvoidoperation1(){System.out.println("D实现了operation1");}@Overridepublicvoidoperation2(){System.out.println("D实现了operation2");}@Overridepublicvoidoperation3(){System.out.println("D实现了operation3");}@Overridepublicvoidoperation4(){System.out.println("D实现了operation4");}@Overridepublicvoidoperation5(){System.out.println("D实现了operation5");}}

classA{//A类通过接口Interface1依赖(使用)B类,但是只会用到1,2,3方法

publicvoiddepend1(Interface1i){i.operation1();}publicvoiddepend2(Interface1i){i.operation2();}publicvoiddepend3(Interface1i){i.operation3();}}

classC{//C类通过接口Interface1依赖(使用)D类,但是只会用到1,4,5方法

publicvoiddepend1(Interface1i){i.operation1();}publicvoiddepend4(Interface1i){i.operation4();}publicvoiddepend5(Interface1i){i.operation5();}}

问题:类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要的方法。

上述问题解决办法:将接口Interface1拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。即采用接口隔离原则。

packagecom.atguigu.principle.segregation.improve;publicclassSegregation1{

publicstaticvoidmain(String[]args){Aa=newA();a.depend1(newB());//A类通过接口去依赖B类a.depend2(newB());a.depend3(newB());Cc=newC();c.depend1(newD());//C类通过接口去依赖(使用)D类c.depend4(newD());c.depend5(newD());}}

//接口1interfaceInterface1{

voidoperation1();}

//接口2interfaceInterface2{

voidoperation2();voidoperation3();}

//接口3interfaceInterface3{

voidoperation4();voidoperation5();}

classBimplementsInterface1,Interface2{

@Overridepublicvoidoperation1(){System.out.println("B实现了operation1");}@Overridepublicvoidoperation2(){System.out.println("B实现了operation2");}@Overridepublicvoidoperation3(){System.out.println("B实现了operation3");}}

classDimplementsInterface1,Interface3{

@Overridepublicvoidoperation1(){System.out.println("D实现了operation1");}@Overridepublicvoidoperation4(){System.out.println("D实现了operation4");}@Overridepublicvoidoperation5(){System.out.println("D实现了operation5");}}

classA{//A类通过接口Interface1,Interface2依赖(使用)B类,但是只会用到1,2,3方法

publicvoiddepend1(Interface1i){i.operation1();}publicvoiddepend2(Interface2i){i.operation2();}publicvoiddepend3(Interface2i){i.operation3();}}

classC{//C类通过接口Interface1,Interface3依赖(使用)D类,但是只会用到1,4,5方法

publicvoiddepend1(Interface1i){i.operation1();}publicvoiddepend4(Interface3i){i.operation4();}publicvoiddepend5(Interface3i){i.operation5();}}

依赖倒转原则(DependenceInversionPrinciple)是指:

请编程完成Person接收消息的功能

实现方案1+分析说明

packagecom.atguigu.principle.inversion;publicclassDependecyInversion{

publicstaticvoidmain(String[]args){Personperson=newPerson();person.receive(newEmail());}}

classEmail{

publicStringgetInfo(){return"电子邮件信息:hello,world";}}

classPerson{

publicvoidreceive(Emailemail){System.out.println(email.getInfo());}}

完成Person接收消息的功能方式1分析

实现方案2+分析说明

packagecom.atguigu.principle.inversion.improve;publicclassDependecyInversion{

publicstaticvoidmain(String[]args){//客户端无需改变Personperson=newPerson();person.receive(newEmail());person.receive(newWeiXin());}}

//定义接口interfaceIReceiver{

publicStringgetInfo();}

classEmailimplementsIReceiver{

@OverridepublicStringgetInfo(){return"电子邮件信息:hello,world";}}

//方式2classPerson{

//这里是对接口的依赖publicvoidreceive(IReceiverreceiver){System.out.println(receiver.getInfo());}}

1、接口传递

应用案例代码

packagecom.atguigu.principle.inversion.improve;publicclassDependencyPass{

publicstaticvoidmain(String[]args){ChangHongchangHong=newChangHong();OpenAndCloseopenAndClose=newOpenAndClose();openAndClose.open(changHong);}}

//方式1:通过接口传递实现依赖//开关的接口interfaceIOpenAndClose{

publicvoidopen(ITVtv);//抽象方法,接收接口}

interfaceITV{//ITV接口

publicvoidplay();}

classChangHongimplementsITV{

@Overridepublicvoidplay(){ //TODOAuto-generatedmethodstub System.out.println("长虹电视机,打开");}}

//实现接口classOpenAndCloseimplementsIOpenAndClose{

@Overridepublicvoidopen(ITVtv){tv.play();}}

2、构造方法传递

publicstaticvoidmain(String[]args){ChangHongchangHong=newChangHong();//通过构造器进行依赖传递OpenAndCloseopenAndClose=newOpenAndClose(changHong);openAndClose.open();}}

//方式2:通过构造方法依赖传递interfaceIOpenAndClose{

publicvoidopen();//抽象方法}

classOpenAndCloseimplementsIOpenAndClose{

publicITVtv;//成员publicOpenAndClose(ITVtv){//构造器this.tv=tv;}@Overridepublicvoidopen(){this.tv.play();}}

@Overridepublicvoidplay(){System.out.println("长虹电视机,打开");}}

3、setter方式传递

publicstaticvoidmain(String[]args){ChangHongchangHong=newChangHong();//通过setter方法进行依赖传递OpenAndCloseopenAndClose=newOpenAndClose();openAndClose.setTv(changHong);openAndClose.open();}}

interfaceIOpenAndClose{

publicvoidopen();//抽象方法publicvoidsetTv(ITVtv);}

privateITVtv;@OverridepublicvoidsetTv(ITVtv){this.tv=tv;}@Overridepublicvoidopen(){this.tv.play();}}

1、继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。

2、继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障。

3、问题提出:在编程中,如何正确的使用继承=>里氏替换原则

1、里氏替换原则(LiskovSubstitutionPrinciple)在1988年,由麻省理工学院的Liskov女士提出的。

2、如果对每个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。换句话说,所有引用基类的地方必须能透明地使用其子类的对象。

3、在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法。

4、里氏替换原则告诉我们,继承实际上让两个类耦合性增强了,在适当的情况下,可以通过聚合,组合,依赖来解决问题。

1、原来运行正常的相减功能发生了错误。原因就是类B无意中重写了父类的方法,造成原有功能出现错误。在实际编程中,常常会通过重写父类的方法完成新的功能,这样写起来虽然简单,但整个继承体系的复用性会比较差。特别是运行多态比较频繁的时候。

2、通用的做法是:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉,采用依赖,聚合,组合等关系代替。

packagecom.atguigu.principle.liskov.improve;publicclassLiskov{

//创建一个更加基础的基类classBase{

//把更加基础的方法和成员写到Base类}

//A类classAextendsBase{

//返回两个数的差publicintfunc1(intnum1,intnum2){ returnnum1-num2;}}

//B类继承了A//增加了一个新功能:完成两个数相加,然后和9求和classBextendsBase{

//如果B需要使用A类的方法,使用组合关系privateAa=newA();//这里,重写了A类的方法,可能是无意识publicintfunc1(inta,intb){ returna+b;}publicintfunc2(inta,intb){ returnfunc1(a,b)+9;}//我们仍然想使用A的方法publicintfunc3(inta,intb){ returnthis.a.func1(a,b);}}

1、开闭原则(OpenClosedPrinciple)是编程中最基础、最重要的设计原则。

2、一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。

3、当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。即增加新功能,尽量不修改代码,而是增加代码。

4、编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。

看一个画图形的功能。

类图设计,如下:

packagecom.atguigu.principle.ocp;publicclassOcp{

publicstaticvoidmain(String[]args){ //使用看看存在的问题 GraphicEditorgraphicEditor=newGraphicEditor(); graphicEditor.drawShape(newRectangle()); graphicEditor.drawShape(newCircle());}}

//这是一个用于绘图的类[使用方]classGraphicEditor{

//接收Shape对象,然后根据type,来绘制不同的图形publicvoiddrawShape(Shapes){ if(s.m_type==1) drawRectangle(s); elseif(s.m_type==2) drawCircle(s);}//绘制矩形publicvoiddrawRectangle(Shaper){ System.out.println("绘制矩形");}//绘制圆形publicvoiddrawCircle(Shaper){ System.out.println("绘制圆形");}}

//Shape类,基类classShape{

intm_type;}

classRectangleextendsShape{

Rectangle(){ super.m_type=1;}}

classCircleextendsShape{

Circle(){ super.m_type=2;}}

1、优点是简单易操作。

2、缺点是违反了设计模式的ocp原则,即对扩展开放(提供方),对修改关闭(使用方)。即当给类增加新功能的时候,尽量不修改代码,或者尽可能少修改代码。

3、比如要新增加一个图形种类三角形,需要做如下修改,修改的地方较多。

代码演示

publicclassOcp{publicstaticvoidmain(String[]args){//使用看看存在的问题GraphicEditorgraphicEditor=newGraphicEditor();graphicEditor.drawShape(newRectangle());graphicEditor.drawShape(newCircle());graphicEditor.drawShape(newTriangle());}}

//接收Shape对象,然后根据type,来绘制不同的图形publicvoiddrawShape(Shapes){if(s.m_type==1){drawRectangle(s);}elseif(s.m_type==2){drawCircle(s);}elseif(s.m_type==3){drawTriangle(s);}}//绘制矩形publicvoiddrawRectangle(Shaper){System.out.println("绘制矩形");}//绘制圆形publicvoiddrawCircle(Shaper){System.out.println("绘制圆形");}//绘制三角形publicvoiddrawTriangle(Shaper){System.out.println("绘制三角形");}}

Rectangle(){super.m_type=1;}}

Circle(){super.m_type=2;}}

//新增画三角形classTriangleextendsShape{

Triangle(){super.m_type=3;}}

使用方于绘图的类GraphicEditor需要修改

思路:把创建Shape类做成抽象类,并提供一个抽象的draw方法,让子类去实现即可,这样当有新的图形种类时,只需要让新的图形类继承Shape,并实现draw方法即可,使用方的代码就不需要修改->满足了开闭原则。

packagecom.atguigu.principle.ocp.improve;publicclassOcp{

publicstaticvoidmain(String[]args){ //使用看看存在的问题 GraphicEditorgraphicEditor=newGraphicEditor(); graphicEditor.drawShape(newRectangle()); graphicEditor.drawShape(newCircle()); graphicEditor.drawShape(newTriangle()); graphicEditor.drawShape(newOtherGraphic());}}

//接收Shape对象,调用draw方法publicvoiddrawShape(Shapes){ s.draw();} }

//Shape类,基类abstractclassShape{

intm_type; publicabstractvoiddraw();//抽象方法}

Rectangle(){ super.m_type=1;}@Overridepublicvoiddraw(){ //TODOAuto-generatedmethodstub System.out.println("绘制矩形");}}

Circle(){ super.m_type=2;}@Overridepublicvoiddraw(){ //TODOAuto-generatedmethodstub System.out.println("绘制圆形");}}

Triangle(){ super.m_type=3;}@Overridepublicvoiddraw(){ //TODOAuto-generatedmethodstub System.out.println("绘制三角形");}}

//新增一个图形classOtherGraphicextendsShape{

OtherGraphic(){ super.m_type=4;}@Overridepublicvoiddraw(){ //TODOAuto-generatedmethodstub System.out.println("绘制其它图形");}}

1、一个对象应该对其他对象保持最少的了解。

2、类与类关系越密切,耦合度越大。

3、迪米特法则(DemeterPrinciple)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public方法,不对外泄露任何信息。

4、迪米特法则还有个更简单的定义:只与直接的朋友通信。

5、直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。

有一个学校,下属有各个学院和总部,现要求打印出学校总部员工ID和学院员工的id。编程实现上面的功能,看代码演示:

packagecom.atguigu.principle.demeter;importjava.util.ArrayList;importjava.util.List;//客户端publicclassDemeter1{

publicstaticvoidmain(String[]args){ //创建了一个SchoolManager对象 SchoolManagerschoolManager=newSchoolManager(); //输出学院的员工id和学校总部的员工信息 schoolManager.printAllEmployee(newCollegeManager());}}

//学校总部员工类classEmployee{

privateStringid;publicvoidsetId(Stringid){ this.id=id;}publicStringgetId(){ returnid;}}

//学院的员工类classCollegeEmployee{

//管理学院员工的管理类classCollegeManager{

//返回学院的所有员工publicListgetAllEmployee(){ Listlist=newArrayList(); for(inti=0;i<10;i++){//这里我们增加了10个员工到list CollegeEmployeeemp=newCollegeEmployee(); emp.setId("学院员工id="+i); list.add(emp); } returnlist;}}

//学校管理类

//分析SchoolManager类的直接朋友类有哪些Employee、CollegeManager//CollegeEmployee不是直接朋友而是一个陌生类,这样违背了迪米特法则classSchoolManager{

//返回学校总部的员工publicListgetAllEmployee(){ Listlist=newArrayList(); for(inti=0;i<5;i++){//这里我们增加了5个员工到list Employeeemp=newEmployee(); emp.setId("学校总部员工id="+i); list.add(emp); } returnlist;}//该方法完成输出学校总部和学院员工信息(id)voidprintAllEmployee(CollegeManagersub){ //分析问题 //1.这里的CollegeEmployee不是SchoolManager的直接朋友 //2.CollegeEmployee是以局部变量方式出现在SchoolManager //3.违反了迪米特法则 //获取到学院员工 Listlist1=sub.getAllEmployee(); System.out.println("------------学院员工------------"); for(CollegeEmployeee:list1){ System.out.println(e.getId()); } //获取到学校总部员工 Listlist2=this.getAllEmployee(); System.out.println("------------学校总部员工------------"); for(Employeee:list2){ System.out.println(e.getId()); }}}

1、前面设计的问题在于SchoolManager中,CollegeEmployee类并不是SchoolManager类的直接朋友(分析)

2、按照迪米特法则,应该避免类中出现这样非直接朋友关系的耦合。

3、对代码按照迪米特法则进行改进。

packagecom.atguigu.principle.demeter.improve;importjava.util.ArrayList;importjava.util.List;//客户端publicclassDemeter1{

publicstaticvoidmain(String[]args){ System.out.println("~~~使用迪米特法则的改进~~~"); //创建了一个SchoolManager对象 SchoolManagerschoolManager=newSchoolManager(); //输出学院的员工id和学校总部的员工信息 schoolManager.printAllEmployee(newCollegeManager());}}

//返回学院的所有员工publicListgetAllEmployee(){ Listlist=newArrayList(); for(inti=0;i<10;i++){//这里我们增加了10个员工到list CollegeEmployeeemp=newCollegeEmployee(); emp.setId("学院员工id="+i); list.add(emp); } returnlist;}//输出学院员工的信息publicvoidprintEmployee(){ //获取到学院员工 Listlist1=getAllEmployee(); System.out.println("------------学院员工------------"); for(CollegeEmployeee:list1){ System.out.println(e.getId()); }}}

//返回学校总部的员工publicListgetAllEmployee(){ Listlist=newArrayList(); for(inti=0;i<5;i++){//这里我们增加了5个员工到list Employeeemp=newEmployee(); emp.setId("学校总部员工id="+i); list.add(emp); } returnlist;}//该方法完成输出学校总部和学院员工信息(id)voidprintAllEmployee(CollegeManagersub){ //分析问题 //1.将输出学院的员工方法,封装到CollegeManager sub.printEmployee(); //获取到学校总部员工 Listlist2=this.getAllEmployee(); System.out.println("------------学校总部员工------------"); for(Employeee:list2){ System.out.println(e.getId()); }}}

1、迪米特法则的核心是降低类之间的耦合。

2、但是注意:由于每个类都减少了不必要的依赖,因此迪米特法则只是要求降低类间(对象间)耦合关系,并不是要求完全没有依赖关系。

原则是尽量使用合成/聚合的方式,而不是使用继承。

1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

THE END
1.上世纪美国汽车设计师的脑洞有多大,设计成这样的车辆,你敢坐吗与Roadmaster旅行车车型相比,定制巡洋舰不再具有外部木纹装饰。尽管与Roadmaster旅行车共享其仪表板和内饰元素,但定制巡洋舰配备了自己的座椅和木质装饰设计;布饰座椅是标准配置,真皮饰座椅是可选配置。与前代车型相比,第三代定制巡洋舰配备了一个仪表盘,仪表盘配备了完整的仪表,包括转速表、油压、电压和冷却液温度。https://www.dongchedi.com/article/7184870591101698621
2.100例——概念交通工具设计!100例——概念交通工具设计! 2023-01-18 23:08 发布于:山西省 — END —返回搜狐,查看更多平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。 阅读() 内容举报大家都在看 我来说两句 0人参与, 0条评论 登录并发表 搜狐“我来说两句” 用户公约 https://www.sohu.com/a/631969069_121124372
3.来自国外的29个设计创意,最后一个单车亮了!看看这些外国人设计的,太有创意了! 1、太阳能充电式的停车场 2、端酒杯的托盘,对于新手服务员来说绝对是救世主 3、很环保的设计,洗手后的水可以直接冲马桶 4、可以隐藏的插板,延长插板寿命 5、太阳能摇动椅,晚上自带灯光哦! 6、这样的设计,即使是喝醉酒也不会找不到钥匙孔了 https://www.163.com/dy/article/E80TSMNV05258H6P.html
4.郑州艺术留学机构排名比较靠前的相关岗位:产品设计师、产品研发、产品创意师。 3 家具设计 平均薪资3~5万美金/年。相关岗位:家具设计师、室内设计、家具企划。 4 交通工具设计 平均薪资 6~7万美金/年。相关岗位:交通工具设计、汽车设计、船舶业。 名校案例:TOP名校申请成功率99% https://m.edutt.com/kc_show_2972743.html
5.交通工具设计留学交通工具设计专业介绍美行思远交通工具设计专业留学栏目,为您提供交通工具设计专业介绍、交通工具设计留学等信息,包括申请要求、英美院校排名、成功案例、常见问题等,美行思远专注交通工具设计留学作品集培训,助您成功申请理想艺术院校!https://www.mxsyzen.com/major/606.html
6.锐科案例中心工业设计外观案例VR设计案例医疗产品人工智能设计,轨道交通工具设计,医疗器械设计,智能医疗设备设计,智能装备设计,智能军警装备设计,智能家居设计,智能机器人设计,智能产品设计,农用器械设计,三防特种装备设计,等_电话热线:400-7561-309https://www.ruikoginews.com/case/
7.法国交通工具设计艺术类本科留学作品集案例多媒体设计 插画设计 纯艺术 2D设计基础 油画 艺术管理 时尚管理 建筑设计 城市规划 景观设计 室内设计 家具设计 工业设计 交互(平面方向) 奢饰品管理 纺织品设计 数字媒体 产品设计 游戏设计 视觉传达 珠宝设计 策展管理 多媒体基础 交通工具设计 交互设计 时尚摄影 版画 雕塑 玻璃 陶艺 印染设计 戏服设计 时尚造型http://rossoarts.net/case-3-1-32.html
8.2024年科技服务市场前景分析预测2024一、交通工具设计行业发展概况 业 二、交通工具设计行业布局设计 调 三、交通工具造型分析 研 四、交通工具设计行业发展趋势与前景 网 第四节 电子产品设计服务业分析 w 一、电子产品设计行业发展概况 w 二、电子产品设计行业竞争格局 w 三、电子产品设计行业发展模式 . 四、电子产品设计行业发展趋势与前景 C 第https://www.cir.cn/R_QiTaHangYe/8A/KeJiFuWuShiChangQianJingFenXiYuCe.html
9.绿色交通设计范例6篇前言:中文期刊网精心挑选了绿色交通设计范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。 绿色交通设计范文1 关键词:交通系统,设计,绿色交通 中图分类号:S611文献标识码: A 引言:现在随着世界经济的快速发展,城市化进程中的各种问题也开始凸现,城市环境污 https://www.baywatch.cn/haowen/277055.html
10.欧亚优秀工业设计案例透析(豆瓣)技术与艺术结合就是设计 众多的案例分析,也有不少大师草图可供临摹,还有入门级设计技巧。感觉对应的读者包含了入门设计者到高级设计者。全书以交通工具及其周边设计为主,突出一个点:技术与艺术结合就是设计。另外,本人认为做交通工具类产品,必须进行油泥模型推敲,书中正好体现了我这一观点。很 (展开) 0回应 https://book.douban.com/subject/7058005/
11.下7.5《第二次工业革命》教案含教学反思设计教材分析说课稿案例宜城教育资源网www.ychedu.com免费人教版历史与社会八下7.5《第二次工业革命》教案含教学反思设计教材分析说课稿案例第五课第二次工业革命一、教学目标(一)知识与能力1、知识方面:第二次工业革命的背景;电力的广泛应用;内燃机与新交通工具的创制;新通讯手段的发明;第二次工业革命的特点;第二次工业革命的影响;2、http://ls.ychedu.com/LSJA/BNJJA/590517.html
12.大众VI:大众品牌的VI设计案例分析大众VI(Visual Identity)是指大众品牌的视觉识别系统,是对大众品牌形象进行统一和规范的设计方案。在当今竞争激烈的市场中,一个成功的VI设计可以帮助大众品牌在众多竞争对手中脱颖而出,树立独特的形象和品牌价值。本文将以大众品牌的VI设计为例,分析其设计案例,探讨其设计理念和效果。 https://www.rhtimes.com/brand/logo-design-news12853.html
13.天津市第一中心医院院徽及医院品牌形象设计案例欣赏医院标志不仅是调动所有视觉要素的主导力量,也是整合所有视觉要素的中心,更是社会大众认同医院品牌的代表性因素,因此医院标志设计在整个视觉形象系统中具有重要的意义。云帆品牌设计提供专业的医院标志设计,医院办公用品设计,医院导示系统设计,医院交通工具识别设计,医患服装识别设计,医院药物包装用品设计,医院广告宣传用品设计http://www.logoideal.com/tjyy.html
14.城市设计案例分析(滨海海岛).pptx城市设计案例分析(滨海-海岛).pptx 41页VIP内容提供方:w6266335 大小:18.64 MB 字数:约5.52千字 发布时间:2021-05-06发布于江苏 浏览人气:397 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)城市设计案例分析(滨海-海岛).pptxhttps://max.book118.com/html/2021/0506/7166201056003121.shtm
15.交通工具产品设计交通工具设计公司上海工具产品设计上海木马交通工具产品设计持续走在设计创新的前沿,专业交通工具产品设计,交通工具设计,交通工具外观设计,交通工具结构设计,为客户提供优质的服务和创意,为客户提供高质量的交通工具产品设计服务。http://www.designmoma.com/industrial/60.html
16.产品结构设计案例教程.pptx案例三:电动汽车的结构设计设计概述电动汽车是一种新型交通工具,其结构设计需考虑动力性能、安全性能和舒适性。关键技术电动汽车结构设计涉及电池技术、驱动系统集成和车身轻量化技术。设计流程从需求分析、概念设计、详细设计到生产准备,需经过多轮迭代和优化。挑战与解决方案主要挑战包括如何提高电池续航里程和充电速度,https://www.renrendoc.com/paper/310053132.html
17.车载逆变电源的设计案例AET车载逆变电源的设计案例 一、 设计的基本要求 在一些交通运载、野外测控、可移动武器装 备 、工程修理车等设备中都配有不同规格的电 源。通常这些设备工作空间狭小,环境恶劣,干扰 大。因此对电源的设计要求也很高,除了具有良好的电气性能外,还必须具备体积小、重量轻、成本 低、可靠性高、抗干扰强等特点。针对http://www.chinaaet.com/article/114080
18.未来生活进行时41:现代交通工具的创新设计与应用电动车真的可以量产成为主流吗?除了电动车,还有什么更好的创新交通工具可以持续这种平衡?今天,我们来看几个关于交通工具方面的好案例。 编辑、作者: Vivian Peng @DamnDigital Cover Image: Wang Qi@DamnDigital (原创内容,转载请注明来自DamnDigital) Tesla Model S: 堪称最有希望掀起电动车革命的纯电动车 https://www.digitaling.com/articles/10204.html