(小例子理解)面向对象编程思想

(小例子实战理解面向对象编程思想)

假如你现在在编写一个程序…,现在你遇到了
问题集合。你现在开始对→问题空间元素
(待解问题元素)与解空间(解决问题的描述)之间进行一对一的映射。

1.逻辑封装 (封装)
你新建了一个包(con.test.object),在包下新建了一个类A,
类A并对某个问题进行解决描述。

2.代码复用 (继承)
紧接着这时你又新建了一个类B,并对某个问题进行解决描述。
这时你发现类B的某个方法与类A的某个方法运算逻辑是一致的,
你开始解决代码复用的问题:
创建了一个新类,
这个类的名字是Abstract开头呢还是Base开头比较合适呢?
(Abstract是抽象意思,Base是基的意思),假如这时候你选择了Base(面向对象选择更合适的命名),
复制一致的成员数据粘贴到类Base,同时删除了类A和类B的共同逻辑成员数据,
并且类A和类B继承自类Base。


3.面向抽象而不面向具体实例 (多态)
现在在main方法中进行对象的创建,此时你有个新需求为类A和类B创建两个设置标题的方法,
这时发现这两个方法代码参数是一样的(逻辑也是一样的),你开始修改代码进行复用逻辑:
首先观察这两个方法,它们的参数需要一个String,方法体则需要一个继承自Base类的对象,没错,
我们只需要抽取这个方法需要的参数出来然后传递需要的参数进行设置标题就行了,如图:

4.监听状态改变而执行某件事 (接口)
现在你有个新需求,当类B更新了文本后,类A就改变颜色。
你现在开始动手,在mian入口类中增加了setBTitle()方法,并在方法体加入了设置对象b的标题语句和
设置a对象的颜色的语句,然后在main活动中调用setBTitle(),这个功能已经完成了。
注意,虽然你的程序已经完成了这个功能,
但是你并没有用到面向对象思想,这时候你要引入一个新概念(interface,接口回调):

首先改变修改B对象增加一个接口名字以Interface或Listener结尾(Interface接口,Listener监听者),所以这里选用
Listener做结尾的接口名更合适,定义这个接口名为OnTitleChangedListener,声明一个存
OnTitleChangedListener对象的引用并加个设置监听对象的方法,最后重写Base父类的setTitle()方法,方法体调用父类方法,
然后在下面调用接口的监听方法,接下来则在main入口创建接口和设置监听对象即可。如图:


你可能会想:我用一个方法就完成了为什么还要搞得那么复杂。
我:在实际开发中可能不这么写,所以可能未修改时的代码比修改后的代码要多,这也是代码的技巧,你可能现在还不知道接口回调有多好用,
以后实际开发中你就能感觉到有多好用了,代码阅读性提高,代码维护性提高。

End
图中我用修改前的代码与修改后的代码做一个鲜明的对比,我想说好的代码都是后期修改得来的,
如果你一开始就能写出修改后的代码,那你一定是负有经验才写出来的。
这篇文章以我从项目经验里来模拟的例子,希望对大家有帮助。

发布了13 篇原创文章 · 获赞 15 · 访问量 942

猜你喜欢

转载自blog.csdn.net/qq_42470947/article/details/103750651