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