Golang 模拟java超类型(abstract class)的实现 推荐
2014-01-20 14:53
555 查看
golang中无继承概念,但利用golang匿名组合即可实现面向对象程序设计中继承的效果。在面向对象程序设计中,一般常见的两种超类型:接口,抽象类。在golang中,则更精简为只包含接口。在设计模式中,有要面向接口(超类型)编程这一重要的设计原则。在某些场合,抽象类比接口更便捷。但这不代表就必须使用抽象类,抽象类可用一般类组合接口来代替实现相应的效果。
下面就用golang接口来模拟java抽象类的实现。
java代码:
对应go代码:其中pizza.PizzaProduct相对应为java中返回的Pizza对象
下面就用golang接口来模拟java抽象类的实现。
java代码:
public abstract class PizzaStore { public Pizza orderPizza(String items) { Pizza pizza; pizza = createPizza(items); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } protected abstract Pizza createPizza(String items); }
对应go代码:其中pizza.PizzaProduct相对应为java中返回的Pizza对象
type pizzaSaler interface { OrderPizza(string) pizza.PizzaProduct createPizza(string) pizza.PizzaProduct } type pizzaStore struct { psaler pizzaSaler } func (this *pizzaStore) OrderPizza(items string) pizza.PizzaProduct { onePizza := this.psaler.createPizza(items) onePizza.Prepare() onePizza.Bake() onePizza.Cut() onePizza.Box() return onePizza }golang的接口为非侵入式接口,为实现继承效果,pizzaStore子类应组合pizzaStore,并实现pizzaSaler的两个函数(OrderPizza方法已在父类PizzaStore实现,所以只要实现CreatePizza方法即可),把子类自身赋值给父类的psaler字段,这就类似与抽象类的子类必须实现抽象类(父类)中的抽象方法:
type NYPizzaStore struct { pizzaStore } func (this *NYPizzaStore) createPizza(items string) pizza.PizzaProduct { if items == "cheese" { return pizza.NewNYStyleCheesePizza() } else if items == "veggie" { return pizza.NewNYStyleVeggiePizza() } else { return nil } } func NewNYPizzaStore() pizzaSaler { //golang无构造函数,故用此法建立实例并初始化 return &NYPizzaStore{pizzaStore: pizzaStore{new(NYPizzaStore)}} //new(NYPizzaStore)将子类自身赋值给父类的pizzaSaler接口字段 }
相关文章推荐
- Java模拟实现百度文档在线浏览 推荐
- Java实现模拟发送POST、GET请求
- rip协议java模拟实现
- 2.当形参,返回值类型不是JavaBean式的复合类,Map时,CXF无法处理:服务器实现类
- 模拟实现qsort, qsort对多类型数据进行排序
- OAF_开发系列25_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(概念)
- Java中的类型转换与强制类型转换的实现
- java中多线程模拟(多生产,多消费,Lock实现同步锁,替代synchronized同步代码块)
- java实现基础数据类型中二进制位操作算法
- java 实现BufferedImage和ImageReader两种方式获取图片宽高、判断图片类型、获取图片大小工具类代码以及测试响应结果
- 模拟hibernate实现的JAVA源码
- 如何实现用Java编写程序,设计一个模拟电梯运行的类
- 模拟带Servlet技术的HTTP服务器的Java实现
- 重修大学JAVA课--应用类型比较器的实现方法:完善版
- Java中常用的类型转换(推荐)
- 在java中实现日期类型和字符串类型的转换大全(Date String Timestamp Datetime)
- Java实现从正方教务系统抓取数据(一)--模拟登录
- Redis缓存Mysql模拟用户登录Java实现实例[www]
- 使用java简单模拟ping和telnet的实现
- Java编程实现的模拟行星运动示例