Giter Site home page Giter Site logo

go-patterns's Introduction

Golang设计模式(初版)

  • 前言

    • go设计模式都是灵活应用struct的组合模式,以及go隐形继承接口的特性
    • go中的interface就是一些方法装饰, 而struct并不依赖于接口
  • 设计模式类型

创建模式

结构模式

  • 装饰模式(Decorator Pattern)
    • 装饰模式使用对象组合的方式动态改变或增加对象行为, 在原对象的基础上增加功能
      
  • 代理模式(Proxy Pattern)
    • 代理模式用于延迟处理操作或者在进行实际操作前后对真实对象进行其它处理。
      
  • 适配器模式(Adapter Pattern)
    • 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
      
  • 组合模式(Composite)
    • 组合模式有助于表达数据结构, 将对象组合成树形结构以表示"部分-整体"的层次结构, 常用于树状的结构
      
  • 享元模式(Flyweight Pattern)
    • 把多个实例对象共同需要的数据,独立出一个享元,从而减少对象数量和节省内存
      
  • 外观模式(Facade Pattern)
    • 外观模式在客户端和现有系统之间加入一个外观对象, 为子系统提供一个统一的接入接口, 类似与委托
      
  • 桥接模式(Bridge Pattern)
    • 桥接模式分离抽象部分和实现部分,使得两部分可以独立扩展
      

行为模式

同步模式(synchronization patterns)

附录(设计模式彩图)

设计模式彩图

go-patterns's People

Contributors

harrywang29 avatar lee501 avatar lijingbo8119 avatar vfuryx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-patterns's Issues

关于sliice的空间节约

你好,我在观察者模式代码里面发现这样一行代码

share.oblist = append(share.oblist[:i], share.oblist[i+1:]...)

当然不止一处是这种写法

这样删除元素,它引用的底层数组还是同一个,如果删除多个的话,len远小于cap,有些浪费空间,不如每次删除的时候重新创建一个slice存放剩下的元素,我看很多项目删除元素都是这样做的

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.