ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java的开发—面向对象的7大原则之开闭原则(一)

2020-02-27 19:01:03  阅读:178  来源: 互联网

标签:Java name 原则 void System 开闭 println public out


开闭原则(Open Close Principle)

一、定义:

软件中的(类、模块、函数等等)应该对于扩展是开放的,对于修改时关闭的。意味着一个实体允许在不改变它的源代码的前提变更它的行为 

这里的软件包含一下几个部分:

1.项目中划分的模块

2.类与接口

3.方法

二、作用

使软件具有一定的适应性和灵活性的同时具备稳定性和延续性

1.对软件测试的影响

遵循开闭原则,只需要对扩展的代码进行测试,原有的测试 代码任然能够运行

2.提高代码复用性

粒度越小(功能越单一),越容易被复用。在面向对象的程序设计中,根据原子和抽象编程可以提高代码的复用性

3.提高软件的可维护性

遵循开闭原则的程序:稳定性高和延续性强,易于扩展和维护

三、开闭原则的实现方法

通过“抽象约束,封装变化”来实现开闭原则,即通过接口和抽象类为软件定义一个相对稳定的抽象层,而将相同的可变因素封装到相同的具体实现类中。

软件中稳定的用抽象或接口约束,易变的用实现类扩展

示例

定义成年人的行为:

固定的:吃饭 上班 睡觉 

易变的:玩游戏 开车 运动

 1 public interface Person {
 2     public void eat();
 3     public void sleep();
 4     public void work();
 5 }
 6 
 7 /**
 8  * 公交司机
 9  */
10 public class BusDriver implements Person {
11     private String name;
12 
13     public BusDriver(String name) {
14         this.name = name;
15     }
16 
17     @Override
18     public void eat() {
19         System.out.println(name + "在吃饭");
20     }
21 
22     @Override
23     public void sleep() {
24         System.out.println(name + "在睡觉");
25     }
26 
27     @Override
28     public void work() {
29         System.out.println(name + "在工作");
30     }
31 
32     /**
33      *  开公交车:公交司机独有的
34      */
35     public void drive(){
36         System.out.println(name + "在开公交车");
37     }
38 
39     public String getName() {
40         return name;
41     }
42 
43     public void setName(String name) {
44         this.name = name;
45     }
46 }
47 
48 /**
49  * 售票员
50  */
51 public class TicketSeller extends Person {
52 
53     public TicketSeller(String name) {
54         super(name);
55     }
56 
57     @Override
58     protected void eat() {
59         System.out.println(getName() + "在吃饭");
60     }
61 
62     @Override
63     protected void sleep() {
64         System.out.println(getName() + "在睡觉");
65     }
66 
67     @Override
68     protected void work() {
69         System.out.println(getName() + "在工作");
70     }
71 
72     /**
73      * 售票员独有的
74      */
75     public void sellTicket(){
76         System.out.println(getName() + "在买票");
77     }
78 }
79 测试:
80 public static void main(String[] args) {
81         BusDriver busDriver = new BusDriver("老王");
82         busDriver.eat();
83         busDriver.work();
84         busDriver.drive();
85         busDriver.sleep();
86         TicketSeller sellTicket = new TicketSeller("李小姐");
87         sellTicket.eat();
88         sellTicket.work();
89         sellTicket.sellTicket();
90         sellTicket.sleep();
91     }
View Code

测试结果:

 

 

结论:下次我增加了飞行员 等等其他类型的人,我直接增加子类就好,在子类中增加自己的方法,从而不用修改原有代码

 

这里面是个人理解,有书写错误的或者大家有更好更容易理解的可以提出来

标签:Java,name,原则,void,System,开闭,println,public,out
来源: https://www.cnblogs.com/kukufan/p/12373695.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有