🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 【引言】 最近将设计模式中的所有代码都敲了一遍,其中在模式大比拼的时候出现了模式分类现象,下面将我对模式类别的理解以及什么时候使用该类模式和大家分享学习。 ### 【三类别分类的原因】 **创建型:**社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。 **结构型:**在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。 **行为型:**在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高。 ### 【创建型模式】 定义:旨在将系统与它的对象创建、结合、表示的方式分离。这些设计模式在对象创建的类型、主体、方式、时间等方面提高了系统的灵活性。 主导思想:一是将系统使用的具体类封装起来,二是隐藏这些具体类的实例创建和组合的方式。 成员:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 使用情况: 1.一个系统需要和它的对象和产品的创建相互独立。 2.一组相关的对象被设计为一起使用。 3.隐藏一个类库的具体实现,仅暴露它们的接口。 4.创建独立复杂对象的不同表示。 5.一个类希望它的子类实现它所创建的对象。 6.类的实例化在运行时才指定。 7.一个类只能有一个实例,而且这个实例能在任何时候访问到。 8.实例应该能在不修改的情况下具有可扩展性。 ### 【结构型模式】 定义:借由以一贯之的方式来了解元件间的关系,以简化设计。 成员:适配器模式、装饰模式、桥接模式、组合模式、享元模式、代理模式、外观模式。 使用情况: 1.需要动态地添加更多功能(装饰模式)。 2.需要其他对象代理来控制这个对象的访问(代理模式)。 3.需要将客户端和子程序进行分离(外观模式)。 4.要使用一个已经存在的类,如果接口不相同,就需要用适配器模式。 5.需求中体现部分与整体结构(组合模式)。 6.需要将抽象部分与它的实现部分分离(桥接模式)。 7.当需要生成大量细粒度的类实例来表示数据时(享元模式)。 ### 【行为型模式】 定义:用来识别对象之间的常用交流模式并加以实现;如此可在进行这些交流活动时增强弹性。 成员:观察者模式、模版方法模式、命令模式、状态模式、职责链模式、解释器模式、中介者模式、访问者模式、策略模式、备忘录模式、迭代器模式。 使用情况: 1.需要定义一系列算法,需要单元测试(策略模式)。 2.需要将不变行为搬移到超类,去除子类中的重复代码,需要代码复用(模版方法)。 3.一个对象的改变需要同时改变其他对象(观察者模式)。 4.控制一个对象状态转换的条件表达式过于复杂时(状态模式)。 5.需要将对象恢复到原先保存的状态(备忘录模式)。 6.需要对聚焦有多种遍历时(迭代器模式)。 7.需要将请求操作对象与知道如何执行操作的对象分隔开(命令模式)。 8.请求者提出请求,需要链上对象负责处理(职责链模式)。 9.系统中出现了多对多的关系并且设计合理时(中介者模式)。 10.一个语言需要解释执行,并且可将该语言中的句子表示为一个抽象语法树(解释器模式)。 11.需要把处理从数据结构中分离出来时(访问者模式)。 ### 【感受】 我认为这些理论知识还得在实际的运用中去领悟其中的真谛,突发自己的思维,通过他们的特点组合或创建出更好,更适合的方法,来真正解决我们所遇到的问题。