go语言抽象工厂设计 go 抽象类( 二 )


正是这种新鲜、有创意但又简单的包装吸引了我们去Go:它是一种令人兴奋的编码语言 , 可以帮助我们在 Curve 中快速开发以构建更好的产品 。
工厂方法模式和抽象工厂模式的区别工厂方法模式:
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类 。
一个抽象工厂类 , 可以派生出多个具体工厂类 。
每个具体工厂类可以创建多个具体产品类的实例 。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个 。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个 。
工厂方法模式: 一个抽象产品类 , 可以派生出多个具体产品类 。一个抽象工厂类 , 可以派生出多个具体工厂类 。每个具体工厂类只能创建一个具体产品类的实例 。抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类 。一个抽象工厂类,可以派生出多个具体工厂类 。每个具体工厂类可以创建多个具体产品类的实例 。区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个 。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个 。
GOF《设计模式》写的很清楚,工厂方法是由子类自行决定实例化那个类 , 而抽象工厂是自己决定实例化哪个类 。至于是组合还是继承还是实现接口都无所谓 。根本区别在于是自己实例化还是子类实例化 。
设计模式系列-Builder模式,工厂方法模式和抽象工厂模式定义:将一个复杂对象go语言抽象工厂设计的构建与它的表示分离go语言抽象工厂设计,使得同样的构建过程可以创建不同的表示
使用场景:
1.多个部件或零件go语言抽象工厂设计,都可以装配到一个对象中go语言抽象工厂设计,但产生的结果又不相同时 。
2.当初始化一个对象特别复杂的时候 , 比如参数多,而且很多参数都有默认值 。
它分为抽象建造者(Builder)角色、具体建造者(ConcreteBuilder)角色、导演者(Director)角色、产品(Product)角色四个角色 。
抽象建造者(Builder)角色:给 出一个抽象接口 , 以规范产品对象的各个组成成分的建造 。
具体建造者(ConcreteBuilder)角色:要完成的任务包括:1.实现抽象建造者Builder所声明的接口,给出一步一步地完成创建产品实例的操作 。2.在建造过程完成后,提供产品的实例 。
导演者(Director)角色:担任这个角色的类调用具体建造者角色以创建产品对象 。
产品(Product)角色:产品便是建造中的复杂对象 。
定义:定义一个用于创建对象的接口 , 让子类决定实例化哪个类 。
任何需要生成复杂对象的地方,都可以使用工厂方法模式 。用new就能创建的对象不需要使用工厂模式,因为使用工厂模式就要增加一个工厂类,增加了系统复杂度 。
关于工厂方法模式的实现
当确定工厂类只有一个的时候,简单工厂模式
工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程 , 旨在通过一步一步地精确构造创建出一个复杂的对象 。
go语言抽象工厂设计我们举个简单例子来说明两者的差异,如要制造一个超人 , 如果使用工厂方法模式,直接产生出来的就是一个力大无穷、能够飞翔、内裤外穿的超人;
而如果使用建造者模式,则需要组装手、头、脚、躯干等部分,然后再把内裤外穿,于是一个超人就诞生了 。

推荐阅读