Python程序语言设计基础,Python编程设计
一、基本介绍
1)开闭原则是编程中最基本、最重要的设计原则。
对于软件实体,如类、模块和功能应该对扩展(提供者)开放,对修改(消费者)关闭。抽象地构建框架,通过实现扩展细节。
)3)当软件需要改变时,并不是通过修改现有代码来改变,而是尽可能地扩展软件实体的行为。
4)编程时遵循其他原则。使用设计模式的目的是遵循开关原则。
二。应用示例
绘制图形的功能。类图如下所示。
描述:GraphicEditor是一个绘制图形的类。有三种方法:画图形的形状,画矩形,画圆,画矩形和圆。
代码实现:
1 publiclassopencloseprinciple { 2 publicstaticvoidmain(string[]args)3 graphiceditor graphiceditor=newgraphiceditor 4 graphiceditor 5 graphic editor . draw shape(new circle);6 }7 }8
9 //用于绘图的类
10接收10classgraphiceditor{11//shape对象,根据m_type绘制不同的图表。
12 publicviddrawshape(shape shape)13if)shape . m _ type==1)14 draw rectangle)shape;15)else if(shape . m _ type==2)16 draw circle)shape;十七(十八)十九
20公共图形标记(shape rectangle(21 system . out . println))“绘制矩形”;22 ) 23
24 publicvoiddrawcount(shape circle){ 25 system . out . println)(“画圆”);26(27 ) 28
29 //基类形状
30 classShape { 31 intm _ type33 ) 33
34 classrectangleextendsshape { 35 public rectangle()){ 36 super . m _ type=1;37 }38 }39
40 classcircleextendsshape { 41 public circle()){ 42 super . m _ type=2;43 }44 }
执行结果:
分析:
)优点是简单易懂,易于操作。
)缺点是违背了扩大开放(提供者)修改封闭(用户)设计模式的switch原则。也就是在给类添加新函数的时候,尽量不要修改代码,或者尽量不要修改代码。
)3)比如此时我们要增加一个新的图形类型的三角形,需要做如下的修正,修正的地方有很多。
新要求:增加画三角形的功能。
描述:首先添加Triangle类继承Shape,并将m_type设置为3,然后在GraphicEditor中添加绘制三角形的drawTriangle方法。
代码实现:
1 publiclassopencloseprinciple { 2 publicstaticvoidmain(string[]args)3 graphiceditor graphiceditor=newgraphiceditor 4 graphiceditor 5 graphic editor . draw shape(new circle);6 graphic editor.draw shape(新三角形));7 }8 }9
10 //用于绘图的类
11 classgraphiceditor { 12//shape/shape接收对象并根据m_type绘制不同的图形
13 publicviddrawshape(shape shape)14if)shape . m _ type==1)15 draw rectangle)shape;16)else if(shape . m _ type==2)(17 draw circle)形状;18)else if(shape . m _ type==3)19 draw triangle)shape;20(21 ) 22
23 publicviddrawtrectangle(shape rectangle){ 24 system . o
Ut.println(画一个矩形);25 }26
2 public void Draw circle(shape circle){ 28 system . out . println(画圆);29 }30
3 public voiddraw triangle(shape triangle){ 32 system . out . println(画一个三角形);33 }34 }35
36 //基类形状
37 classShape { 38 intm _ type39 }40
41类Rectangle extends shape { 42 public Rectangle(){ 43 super . m _ type=1;44 }45 }46
47类Circle extends shape { 48 public Circle(){ 49 super . m _ type=2;50 }51 }52
53 class Triangle extends shape { 54 public Triangle(){ 55 super . m _ type=3;56 }57 }
运行结果:
分析:虽然我们实现了功能,但是每次添加新的图形都要这么做,太麻烦了,需要用开闭原理来完善程序。改进的思路是把Shape类做成一个抽象类,提供一个抽象的draw方法给子类实现。这样,当我们有新的图形类型时,只需要让新的图形类继承形状,实现draw方法,用户的代码不需要修改,就满足了开闭原则。
代码实现:
1公共类opencloseprinciple { 2公共静态void main(String[]args){ 3图形编辑器graphic editor=new graphic editor();4图形编辑器。绘制形状(新矩形());5图形编辑器。绘制形状(new circle());6图形编辑器。绘制形状(新三角形());7 }8 }9
10 //用于绘图的类
11 classGraphicEditor { 12 public void draw Shape(Shape Shape){ 13 Shape。draw();14 }15 }16
17 //基类形状
18抽象classShape { 19 intm _ type20
21 //抽象方法:绘制图形
22公共抽象void draw();23 }24
25类矩形扩展shape { 26 public Rectangle(){ 27 super。m _ type=1;28 }29
30 @ override 31 public void draw(){ 32 system。出去。println(绘制矩形);33 }34 }35
36类圆形扩展形状{ 37 public Circle(){ 38 super。m _ type=2;39 }40
41 @ override 42 public void draw(){ 43 system。出去。println(绘制圆形);44 }45 }46
47类三角形扩展形状{ 48公共三角形(){ 49超级。m _ type=3;50 }51
52 @ override 53 public void draw(){ 54 system。出去。println(绘制三角形);55 }56 }
运行结果:
分析:运行结果与上面的代码相同,但是如果我们这时候新增一个绘制梯形的需求,只需要扩展代码即可,不需要修改原有代码
代码实现:
1公共类opencloseprinciple { 2公共静态void main(String[]args){ 3图形编辑器graphic editor=new graphic editor();4图形编辑器。绘制形状(新矩形());5图形编辑器。绘制形状(new circle());6图形编辑器。绘制形状(新三角形());7图形编辑器。绘制形状(新梯形());8 }9 }10
11 //用于绘图的类
12 classGraphicEditor { 13 public void draw Shape(Shape Shape){ 14 Shape。draw();15 }16 }17
18 //基类形状
19抽象classShape { 20 intm _ type21
22 //抽象方法:绘制图形
23公共抽象void draw();24 }25
26类矩形扩展shape { 27 public Rectangle(){ 28 super。m _ type=1;29 }30
31 @ override 32 public void draw(){ 33 system。出去。println(绘制矩形);34 }35 }36
37类圆形扩展形状{ 38 public Circle(){ 39 super。m _ type=2;40 }41
42 @ override 43 public void draw(){ 44 system。出去。println(绘制圆形);45 }46 }47
48级三角形扩展形状{ 49公共三角形(){ 50超级。m _ type=3;51 }52
53 @ override 54 public void draw(){ 55 system。出去。println(绘制三角形);56 }57 }58
59级梯形扩展形状{ 60公共梯形(){ 61超。m _ type=4;62 }63
64 @ override 65 public void draw(){ 66 system。出去。println(绘制梯形);67 }68 }
运行结果:
分析:这时候我们发现,仅仅增加了一个新的类梯形继承形状并且实现了画方法就实现了功能,在扩展了代码功能的同时也没有对原有代码进行较大的改动,这就是开闭原则的魅力所在
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。