设计模式(创建型模式)
Posted bzfsdr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式(创建型模式)相关的知识,希望对你有一定的参考价值。
目录:
- 设计模式的六大原则
- 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
本文参考:菜鸟教程,https://www.runoob.com/design-pattern/design-pattern-tutorial.html
设计模式的六大原则
1、开闭原则(Open Close Principle):开闭原则的意思是,对扩展开放,对修改关闭。
2、里氏代换原则(Liskov Substitution Principle):是面向对象设计的基本原则之一,任何基类可以出现的地方,子类一定可以出现。
3、依赖倒转原则(Dependence Inversion Principle):这个原则是开闭原则的基础,针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle):使用多个隔离的接口,比使用单个接口要好,降低类之间的耦合度。它强调降低依赖,降低耦合。
5、迪米特法则,又称最少知道原则(Demeter Principle):一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则(Composite Reuse Principle):尽量使用合成/聚合的方式,而不是使用继承。
工厂模式(Factory Pattern)
解决问题: 通过工厂类来解耦客户与产品,让客户使用产品时而不需要了解如何的创建这个产品。
应用实例:类似于我们要去买东西,这个场景是我们只需要买东西,而不需要知道这个东西是怎样生产的,怎样销售的,我们只需要买就可以了。而某宝、某东就类似于一个工厂,我们只需要告诉工厂我要买什么,工厂就能给我们生产什么,这样就屏蔽了客户与厂商的交流细节,让两端都只需要做自己最该做的那部分。(我们:客户;商品:产品;某宝、某东:工厂类。)
示例:https://github.com/mrjdrs/sign-model.git
抽象工厂模式(Abstract Factory Pattern)
解决问题:工厂产品族的问题。
应用实例:假如我是一个买电子产品的,原来我只买同种类的手机或电脑,别人只要找我买手机或电脑就行了,因为我只有这一种。有一天我丰富了自己的产品我有A类手机、B类手机,A类电脑、B类电脑了,此时用户想买我的产品时不仅要知道自己买手机还要知道自己要买什么品种(假如用户是随便的,不挑(?ω?)),这样无疑增加了用户购买的难度,因为用户只是要一台手机或电脑而已,所以我们需要帮用户选择。(手机、电脑:产品;手机电脑的型号:产品族;我:抽象工厂;我帮用户挑选:具体的工厂)。
示例:https://github.com/mrjdrs/sign-model.git
单例模式(Singleton Pattern)
解决问题:控制实例数目,节省系统资源。
应用实例: 医生看病,病人很多,但始终只有一个医生。(医生:单例类;病人:使用客户端)
示例:https://github.com/mrjdrs/sign-model.git
建议:一般情况下,不建议使用第 1 种和第 2 种懒汉方式,建议使用第 3 种饿汉方式。只有在要明确实现 lazy loading 效果时,才会使用第 5 种登记方式。如果涉及到反序列化创建对象时,可以尝试使用第 6 种枚举方式。如果有其他特殊的需求,可以考虑使用第 4 种双检锁方式。
建造者模式(Builder Pattern)
解决问题:基本部件不会变,而其组合经常变化的时候。
应用实例:去食堂打菜,基本的菜式不变,变化的是本次需吃的菜品。
示例:https://github.com/mrjdrs/sign-model.git
原型模式(Prototype Pattern)
解决问题:通过java.lang.Object#clone解决,创建对象代价比较大时的场景。
应用实例:细胞分裂。
示例:https://github.com/mrjdrs/sign-model.git
以上是关于设计模式(创建型模式)的主要内容,如果未能解决你的问题,请参考以下文章