![](https://img-blog.csdnimg.cn/bcbed0f11287422a97896d5cc369e873.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Golang设计模式
文章平均质量分 69
Golang设计模式
cheems~
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
golang力扣leetcode 114.二叉树展开为链表
114.二叉树展开为链表114.二叉树展开为链表题解代码114.二叉树展开为链表114.二叉树展开为链表题解思路:1.将原来的左子树放到右子树2.将原来的右子树,放到原来的左子树的最右边 1 / \ 2 5 / \ \3 4 6//将 1 的左子树插入到右子树的地方 1 \ 2 5 / \ \ 3 4 6 //将原来的右子树接到左子树的最原创 2022-04-30 17:06:23 · 585 阅读 · 0 评论 -
Golang设计模式专栏汇总
01工厂模式02抽象工厂模式03外观模式04建造者模式05桥接模式06命令模式07迭代器模式08模板模式09访问者模式10备忘录模式11责任链模式12中介模式13原型模式14状态模式15策略模式16享元模式17组合模式18解释器模式介绍19单例模式20适配器模式21代理模式22装饰器模式23观察者模式...原创 2021-09-26 15:12:33 · 324 阅读 · 0 评论 -
Golang设计模式——00简单工厂模式
package Factoryimport "fmt"type Restaurant interface { GetFood()}type SpecificRestaurantA struct {}func (s *SpecificRestaurantA) GetFood() { fmt.Println("SpecificRestaurantA的饭菜已经生产完毕...")}type SpecificRestaurantB struct {}func (s *Specif..原创 2021-09-24 15:07:12 · 642 阅读 · 0 评论 -
Golang设计模式——01工厂方法模式
工厂方法模式优点缺点场景代码工厂方法模式优点定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类工厂方法克服了简单工厂违背开放封闭原则的缺点,又保持了封装对象创建过程的优点一个简单工厂的工厂类,变成一个工厂抽象接口和多个具体生产对象的工厂,于是我们要增加一个新的逻辑运算,就不需要更改原来的工厂类了,只需要增加此功能的运算类和对应的工厂类就可以了。缺点每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。场景工厂方法模式就是升级版的简.原创 2021-09-26 20:13:56 · 730 阅读 · 0 评论 -
Golang设计模式——02抽象工厂模式
package Abstract_Factoryimport "fmt"type Lunch interface { Cook()}type Rise struct {}func (r *Rise) Cook() { fmt.Println("it is Rise.")}type Tomato struct {}func (t *Tomato) Cook() { fmt.Println("it is Tomato.")}type LunchFactory inter原创 2021-09-24 15:48:00 · 939 阅读 · 0 评论 -
Golang设计模式——03外观模式
package Facadeimport "fmt"type CarModel struct {}func NewCarModel() *CarModel { return &CarModel{}}func (c *CarModel) SetModel() { fmt.Println("CarModel - SetModel")}type CarEngine struct {}func NewCarEngine() *CarEngine { return &am原创 2021-09-24 16:25:44 · 507 阅读 · 0 评论 -
Golang设计模式——04建造者模式
package Buildertype Builder interface { Build()}type Director struct { builder Builder}func NewDirector(b Builder) Director { return Director{builder: b}}func (d *Director) Construct() { d.builder.Build()}type ConcreteBuilder struct { bu原创 2021-09-24 16:56:01 · 412 阅读 · 0 评论 -
Golang设计模式——05桥接模式
package Bridgeimport "fmt"type Draw interface { DrawCircle(radius, x, y int)}type RedCircle struct {}func (r *RedCircle) DrawCircle(radius, x, y int) { fmt.Println("radius,x,y", radius, x, y)}type YellowCircle struct {}func (r *YellowCirc原创 2021-09-24 19:23:17 · 420 阅读 · 0 评论 -
Golang设计模式——06命令模式
package Commandimport "fmt"type Person struct { name string cmd Command}type Command struct { person *Person method func()}func NewCommand(p *Person, method func()) Command { return Command{ person: p, method: method, }}func (c *Comma原创 2021-09-24 19:23:49 · 371 阅读 · 2 评论 -
Golang设计模式——07迭代器模式
package Iteratortype Iterator interface { Index() *int Value() interface{} HasNext() bool Next()}type ArrayIterator struct { array []interface{} index *int}func (a *ArrayIterator) Index() *int { return a.index}func (a *ArrayIterator) Value原创 2021-09-24 19:34:34 · 360 阅读 · 0 评论 -
Golang设计模式——08模板模式
package Templateimport "fmt"type WorkInterface interface { GetUp() Work() Sleep()}type Worker struct { WorkInterface}func NewWorker(w WorkInterface) *Worker { return &Worker{WorkInterface: w}}func (w *Worker) Daily() { w.GetUp() w.Wo原创 2021-09-24 19:46:10 · 399 阅读 · 0 评论 -
Golang设计模式——09访问者模式
package Visitorimport "fmt"type IVisitor interface { Visit()}type WeiBoVisitor struct {}func (w WeiBoVisitor) Visit() { fmt.Println("visit weibo")}type IQIYIVisitor struct {}func (I IQIYIVisitor) Visit() { fmt.Println("visit iqiyi")}ty原创 2021-09-24 19:56:35 · 406 阅读 · 0 评论 -
Golang设计模式——10备忘录模式
package Mementotype Memento struct { state int}func NewMemento(value int) *Memento { return &Memento{value}}type Number struct { value int}func NewNumber(value int) *Number { return &Number{value}}func (n *Number) Double() { n.va原创 2021-09-25 15:05:53 · 276 阅读 · 0 评论 -
Golang设计模式——11责任链模式
package ResponsibilityChainimport ( "strconv")type Handler interface { Handler(handlerID int) string}type handler struct { name string next Handler handlerID int}func NewHandler(name string, next Handler, handlerID int) *handler {原创 2021-09-25 15:06:03 · 843 阅读 · 0 评论 -
Golang设计模式——12中介模式
package Mediatorimport "fmt"type Mediator interface { Communicate(who string)}type WildStallion interface { SetMediator(mediator Mediator)}type Bill struct { mediator Mediator}func (b *Bill) SetMediator(mediator Mediator) { b.mediator = med原创 2021-09-25 15:06:23 · 305 阅读 · 0 评论 -
Golang设计模式——13原型模式
package Prototypetype Prototype interface { Name() string Clone() Prototype}type ConcretePrototype struct { name string}func (p *ConcretePrototype) Name() string { return p.name}func (p *ConcretePrototype) Clone() Prototype { return &Co原创 2021-09-25 15:06:38 · 318 阅读 · 0 评论 -
Golang设计模式——14状态模式
package Stateimport "fmt"type State interface { On(m *Machine) Off(m *Machine)}type Machine struct { current State}func NewMachine() *Machine { return &Machine{current: NewOFF()}}func (m *Machine) setCurrent(s State) { m.current = s}原创 2021-09-25 15:06:46 · 365 阅读 · 0 评论 -
Golang设计模式——15策略模式
package Strategyimport "fmt"type Strategy interface { Execute()}type strategyA struct {}func NewStrategyA() Strategy { return &strategyA{}}func (s *strategyA) Execute() { fmt.Println("A plan executed.")}type strategyB struct {}fun原创 2021-09-25 15:25:53 · 534 阅读 · 0 评论 -
Golang设计模式——16享元模式
package FlyWeighttype FlyWeight struct { Name string}func NewFlyWeight(name string) *FlyWeight { return &FlyWeight{Name: name}}type FlyWeightFactory struct { pool map[string]*FlyWeight}func NewFlyWeightFactory() *FlyWeightFactory { retur原创 2021-09-25 15:37:36 · 329 阅读 · 0 评论 -
Golang设计模式——17组合模式
package Compositeimport "fmt"type Component interface { Traverse()}type Leaf struct { value int}func NewLeaf(value int) *Leaf { return &Leaf{value: value}}func (l *Leaf) Traverse() { fmt.Println(l.value)}type Composite struct { chi原创 2021-09-25 16:28:03 · 441 阅读 · 0 评论 -
Golang设计模式——18解释器模式
package Interpreterimport "strings"type Expression interface { Interpret(variables map[string]Expression) int}type Integer struct { integer int}func (n *Integer) Interpret(variables map[string]Expression) int { return n.integer}type Plus str原创 2021-09-25 16:57:23 · 373 阅读 · 0 评论 -
Golang设计模式——19单例模式
package Singletonimport "sync"var ( p *Pet once sync.Once)func init() { once.Do(func() { p = &Pet{} })}func GetInstance() *Pet { return p}type Pet struct { name string age int mux sync.Mutex}func (p *Pet) SetName(n string原创 2021-09-25 17:49:09 · 348 阅读 · 0 评论 -
Golang设计模式——20适配器模式
package Adapterimport "fmt"type Target interface { Execute()}type Adaptee struct {}func (a *Adaptee) SepcificExecute() { fmt.Println("充电...")}type Adapter struct { *Adaptee}func (a *Adapter) Execute() { a.SepcificExecute()}原创 2021-09-26 15:12:13 · 510 阅读 · 0 评论 -
Golang设计模式——21代理模式
package Proxyimport "fmt"type ITask interface { RentHouse(desc string, price int)}type Task struct {}func (t *Task) RentHouse(desc string, price int) { fmt.Println(fmt.Sprintf("租房子的地址%s,价格%d,中介费%d", desc, price, price))}type AgentTask struct原创 2021-09-26 15:12:18 · 1009 阅读 · 0 评论 -
Golang设计模式——22装饰者模式
package Decoratorimport ( "log" "math" "time")func pi(n int) float64 { ch := make(chan float64) for k := 0; k < n; k++ { go func(ch chan float64, k float64) { ch <- 4 * math.Pow(-1, k) / (2*k + 1) }(ch, float64(k)) } result := 0.0原创 2021-09-26 15:12:24 · 393 阅读 · 0 评论 -
Golang设计模式——23观察者模式
package Observerimport ( "fmt" "sync" "time")type Event struct { Data int}type Observer interface { NotifyCallBack(event Event)}type Subject interface { AddListener(observer Observer) RemoveListener(observer Observer) Notify(event Event)原创 2021-09-26 15:12:29 · 497 阅读 · 0 评论