设计模式介绍

简介: 设计模式介绍

设计模式的分类

>>创建型模式

简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

>>结构型模式

代理模式、适配器模式、装饰器模式、外观模式、桥接模式、享元模式

>>行为型模式

观察者模式、责任链模式、模板方法模式、策略模式、迭代子模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式


模式介绍

1.简单工厂模式

定义一个创建不同对象的工厂类,在类方法里根据参数创建出不同的对象。简单好用但是如果要扩展必须改工厂类方法代码。

2.工厂方法模式

定义一个创建对象的父类,在父类里定义一个创建对象的抽象方法。通过在子类中实现抽象方法的方式可以创造出不同的对象。好处是扩展新类型对象时不用改动父类,只用新建一个子类实现抽象方法就行了。问题是创建不同的对象要知道不同的子类,为了解决这个问题又有了抽象工厂模式

3.抽象工厂模式

定义一个接口用于创建相关或者有依赖关系的对象族,而无需指定具体类。抽象工厂是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

优点

1.分离了具体的类。客户通过抽象接口操纵实例,产品的类名也在具体工厂的实现中被分离,它们不出现在客户代码中。

2.易于交换产品系列。一个具体工厂类只在初始化时出现一次,这使得改变一个应用的具体工厂变得很容易,只需改变具体的工厂即可使用不同的产品配置。

3.有利于产品的一致性。当一个系列的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要,而抽象工厂很容易实现这一点。

缺点

难以支持新种类的产品。因为抽象工厂接口确定了可以被创建的产品集合,所以难以扩展抽象工厂以生产新种类的产品。

三种模式的使用选择

简单工厂:用来生产同一等级结构中的任意产品,但不支持扩展增加产品。

工厂方法:用来生产同一等级结构中的固定产品,支持扩展产品。

抽象工厂:用来生产不同产品族的全部产品,支持产品扩展,支持产品族扩展。

4.单例模式

确保一个类全局只有一个实例并提供一个访问点。单例模式分为预加载和懒加载模式。

预加载:一般用static的形式在类没有使用的时候已经完成初始化对线程安全但是如果没有被用到会造成内存浪费。

懒加载:为了避免内存浪费使用懒加载模式在用到单例对象的时候再创建,因为创建对象不是原子操作所以不是线程安全的,可以通过synchronized进行同步操作保证原子性。

public class Singleton {
       private static volatile Singleton instance = null;
       private Singleton() {
       };
       public static synchronized Singleton getInstance() {
              if (instance == null) {
                     synchronized (instance) {
                           if (instance == null) {
                                  instance = new Singleton();
                           }
                     }
              }
              return instance;
       }
}


相关文章
|
8月前
|
设计模式 开发框架 前端开发
设计模式一
设计模式是面向对象编程的实践经验,旨在解决一系列问题,促进软件的可升级和维护。它分为创建型(如工厂、单例模式)、结构型(适配器、装饰器模式等)和行为型(观察者、策略模式等)三大类。J2EE模式关注表示层,包括MVC模式等。设计模式的七大原则包括里氏替换、依赖倒置、开闭原则、单一职责、接口隔离、迪米特原则和合成复用原则,这些原则有助于减少耦合和提高代码可读性。接口作为契约和层间对接工具,约束类型行为并允许实现多继承。
|
9月前
|
设计模式 缓存 算法
设计模式
设计模式
51 0
|
设计模式 程序员
设计模式 | 模版方法
设计模式 | 模版方法
91 0
|
9月前
|
设计模式 数据中心
常用设计模式这样学
常用设计模式这样学
|
9月前
|
设计模式 Java C#
C#设计模式——上
C#设计模式——上
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36108 16
设计模式(C++版)
|
设计模式 安全 Java
设计模式~单列模式-01
单列模式 1、饿汉式 2、懒汉式(lazy loading) 3、双重检测 4、静态内部类
48 0
|
设计模式 存储 NoSQL
为什么我们需要设计模式?
设计模式解决什么问题设计模式一直被认为是一门难以学习的课程。究其原因是因为我们不清楚设计模式在解决哪些问题方面发挥作用。简言之,设计是为了实现特定的目标,基于不断更新的局部知识来获得解决方案的过程。我们通常熟悉的范式是在几乎掌握所有知识的情况下解决问题,例如解数学题、物理题等。然而,在软件编程过程中,我们掌握的知识往往不充分,而且会不断更新,因此需要我们关注有哪些知识,没有哪些知识,可以获取哪些知
9348 1
|
设计模式 程序员
设计模式(二)
设计模式
138 1
|
设计模式
设计模式之其他设计模式(7-2)
设计模式之其他设计模式(7-2)
151 0