设计模式
程序员红豆
这个作者很懒,什么都没留下…
展开
-
设计模式-建造者模式
意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作 何时使用:一些基本部件不会变,而其组合经常变化的时候。 优点: 1、建造者独立,易扩展。 2、便于控制细节风险。 缺点: 1、产品必须有共同点,范围有限制。 使用场景: 1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。 注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序 type Compute原创 2022-04-14 22:15:14 · 316 阅读 · 0 评论 -
设计模式-装饰器模式
意图:动态地给一个对象添加一些额外的职责。 如何解决:将具体功能职责划分,同时继承装饰者模式。 优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。 缺点:多层装饰比较复杂。 使用场景: 1、扩展一个对象的功能。 2、动态增加功能,动态撤销。 type Person struct { Name string } func (p *Person) show() { if p == nil { return } fm原创 2022-04-14 21:06:06 · 182 阅读 · 0 评论 -
设计模式-工厂模式
在工厂模式中,不会对外部暴露创建对象的逻辑,通过使用接口来指向新创建的对象。 意图:定义一个创建对象的接口,工厂模式使创建对象过程对外部隐蔽。 主要解决:主要解决接口选择的问题。 何时使用:明确地计划不同条件下创建不同实例时。 如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。 关键代码:创建对象过程在工厂中完成。 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂就可以。 3、屏蔽产品的具体实现,调用者只关心产品的.原创 2022-04-13 10:31:12 · 91 阅读 · 0 评论 -
什么是依赖注入?DI
容器(Container) 管理对象的生成、资源取得、销毁等生命周期 建立对象与对象之间的依赖关系 启动容器后,所有对象直接取用,不用编写任何一行代码来产生对象,或是建立对象之间的依赖关系。 依赖注入容器 Dependency Injection Container 管理应用程序中的『全局』对象(包括实例化、处理依赖关系)。 可以延时加载对象(仅用到时才创建对象)。 促进编写可重用、可测试和松耦合的代码。 type Di struct { di原创 2022-04-11 16:15:10 · 96 阅读 · 0 评论 -
什么是依赖反转?IoC
控制反转 Inversion of Control是依赖关系的转移,依赖抽象而非具体 先来看依赖具体的代码 func main() { b := Bussiness{} b.save() } type Bussiness struct { FloppyWriter } type FloppyWriter struct {} func (b Bussiness) save() { b.saveToDevice() } func (f *FloppyWriter) saveToD..原创 2022-04-11 15:20:14 · 231 阅读 · 0 评论 -
设计模式-单例模式
目的:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决:一个全局使用的对象频繁地创建与销毁。 何时使用:需要控制实例数目,节省系统资源的时候。 如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例 2、避免对资源的多重占用(比如写文件操作)。 使用场景: 1、计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。 2、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连原创 2022-04-11 14:56:47 · 832 阅读 · 0 评论