咕泡P6:Java互联网高级架构师5期

xiaotu123 · · 951 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

老规矩,在代码理论之前,先对根底学问做一个提高。 1、面向对象中的多态(Polymorphism)是指一个对象能够具有多种不同的形态或表现方式。简单来说,就是同一个类型的对象,在不同的上下文中表现出不同的行为。多态性是面向对象的三大特性之一(封装、继承、多态)。 咕泡P6:Java互联网高级架构师5期 下栽地止:http://daxiacode.com 2、在多态中,父类的援用能够指向子类的对象,经过父类的援用调用子类的办法。这样能够完成代码的灵敏性和扩展性,能够依据详细的对象类型调用相应的办法,无需关怀对象的详细类型。 3、经过多态性,能够经过统一的接口来处置不同的对象,完成代码的简约性和可维护性。多态性提供了一种笼统的方式来处置对象的不同行为,使得代码更具灵敏性和可扩展性。 总结一句,就是同一个办法在不同的对象实例中,能够有不同的行为。这里简单用PHP举一个案例。 在PHP中完成多态需求遵照以下几个步骤: 1、创立父类(基类):定义一个包含通用办法和属性的父类。 class Animal { public function makeSound() { echo "Animal makes sound."; } } 2、创立子类(派生类):继承父类,并添加本人特定的办法和属性。 class Dog extends Animal { public function makeSound() { echo "Dog barks."; } } class Cat extends Animal { public function makeSound() { echo "Cat meows."; } } 3、创立对象并调用办法:经过父类的援用来实例化子类对象,能够依据详细的对象类型调用相应的办法。 $animal1 = new Dog(); $animal1->makeSound(); // Output: Dog barks. $animal2 = new Cat(); $animal2->makeSound(); // Output: Cat meows. 经过以上步骤,我们能够完成多态性,即相同父类类型的对象(例如Animal),在不同的对象实例下调用相应的子类办法(例如Dog或Cat)。这样就完成了多态的效果。 Go言语完成 由于Go中没有面向对象的概念,但依据多态的定义和特性,我们能够运用Go中的interface来完成多态。 package main import "fmt" type Animal interface { run() } type Turtle struct { } func (t Turtle) run() { fmt.Println("乌龟匍匐很慢") } type Rabbit struct { } func (r Rabbit) run() { fmt.Println("兔子跑步很快") } func main() { var animal Animal // 实例化一个Turtle对象 animal = &Turtle{} animal.run() // 实例化一个Rabbit对象 animal = &Rabbit{} animal.run() } 1、首先我们定义了一个Animal的接口,并在接口中定义了一个约束,就是run()办法。 2、接着我们定义了Turtle和Rabbit两个构造体,并分别定义了一个run()办法。 3、此时两个构造体隐式的完成了Animal接口中的办法。 4、依据多态的特性,两个构造体中的办法,都能够具备本人的行为。我们在两个办法中分别打印了内容,此时可以打印出不同的内容。不同的内容就能够了解为不同的行为,当然你也能够在这个办法中做其他的操作。 5、在main()办法中,创立一个Animal的变量,并经过不同的构造体实例,调用相同的办法名,最终输出不同的内容。 实战案例 上面对多态有了一定的理解,接着罗列一个实战的案例。 在系统支付,普通我们会对接微信和支付宝这样的平台,大致的流程就是,创立订单记载->组装支付参数->发起支付恳求->支付平台停止回调通知->修正订单支付状态。 基于这样的逻辑,我们运用一个Pay接口,定义三个办法。 type Pay interface { createOrder() // 创立订单 createPay() // 常见支付参数 notifyPay() // 回调通知 } 接着定义详细的完成类,就是微信支付和支付宝支付。 1、定义一个微信支付,用来完成接口中的三个办法。 type WeChat struct { // 微信支付方式 } func (a WeChat) createOrder() { fmt.Println("我是微信支付,如今我正在创立订单数据,用于记载到数据库中。") } func (a WeChat) createPay() { fmt.Println("我是微信支付,如今我正在创立支付数据,用于向微信发起支付恳求运用。") } func (a WeChat) notifyPay() { fmt.Println("我是微信支付,如今我正在承受微信通知的参数,用于修正用户订单支付状态。") } 2、定义一个支付宝支付,用来完成接口中的三个办法。 type Ali struct { // 支付宝支付方式 } func (a Ali) createOrder() { fmt.Println("我是支付宝支付,如今我正在创立订单数据,用于记载到数据库中。") } func (a Ali) createPay() { fmt.Println("我是支付宝支付,如今我正在创立支付数据,用于向支付宝发起支付恳求运用。") } func (a Ali) notifyPay() { fmt.Println("我是支付宝支付,如今我正在承受支付宝通知的参数,用于修正用户订单支付状态。") } 接下来,就来停止实践的订单操作。 1、假定当前的支付渠道运用的是微信支付。 func main() { var pay Pay pay = &WeChat{} pay.createOrder() pay.createPay() pay.notifyPay() } 最终输出的结果为: 我是微信支付,如今我正在创立订单数据,用于记载到数据库中。 我是微信支付,如今我正在创立支付数据,用于向微信发起支付恳求运用。 我是微信支付,如今我正在承受微信通知的参数,用于修正用户订单支付状态。 2、假定当前的支付渠道运用的是支付宝支付。 func main() { var pay Pay pay = &Ali{} pay.createOrder() pay.createPay() pay.notifyPay() } 最终输出结果为: 我是支付宝支付,如今我正在创立订单数据,用于记载到数据库中。 我是支付宝支付,如今我正在创立支付数据,用于向支付宝发起支付恳求运用。 我是支付宝支付,如今我正在承受支付宝通知的参数,用于修正用户订单支付状态。 到此,在Go中完成面向对象以及三大特性(封装、继承和多态)就给大家分享终了。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

951 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传