设计模式

2019-11-15  本文已影响0人  无痕25

1. 原则

1. 单一职责原则
单一职责原则,就一个类而言,应该仅有一个引起它变化的原因。
解释:

2. 设计模式

1.创建型模式

  1. 抽象工厂模式:提供了一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类
  2. 建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示
  3. 工厂方法模式:将类的实例化操作延迟到子类完成,即由子类来决定究竟应该实例化哪一个类
  4. 单例模式:确保在系统中某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

2.结构型模式

  1. 适配器模式:将一个接口转换成客户希望的另一个接口,从而使接口不兼容的哪些类可以一起工作
  2. 桥接模式:将抽象部分与他的实现部分分离,使他们都可以独立的进行变化
  3. 装饰模式:动态给一个对象增加一些额外的职责
  4. 代理模式:给某一个对象提供一个代理,并由代理对象控制对原对象的引用

3.行为型模式

  1. 职责链模式:避免请求发送者和接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止
  2. 迭代器模式:提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示
  3. 策略模式:定义一系列算法,并将每一个算法封装在一个类中,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化
  4. 模板方法:定义一个操作中算法的骨架,而将这一些步骤延迟到子类中

3.单例模式

需要:
(1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
(2)在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。
(3)定义一个静态方法返回这个唯一对象。

实现一:立即加载 / “饿汉模式”
“饿汉模式”的优缺点:
优点:实现起来简单,没有多线程同步问题。
缺点:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。

实现二:延迟加载 / “懒汉模式”
“懒汉模式”的优缺点:
优点:实现起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance未被创建并分配内存空间,当getInstance方法第一次被调用时,初始化instance变量,并分配内存,因此在某些特定条件下会节约了内存。
缺点:在多线程环境中,这种实现方法是完全错误的,根本不能保证单例的状态。

package singletion;

/**
 * @author WangXiaoeZhe
 * @Date: Created in 2019/9/2 11:46
 * @description:
 */
public class Singleton {
    /**
     * 饿汉式
     */
    private static Singleton instance = new Singleton();

   /* private Singleton(){}
    static Singleton getInstance() {
        return instance;
    }*/

    /**
     * 懒汉式
     */

    private static Singleton instence = null;

    private Singleton() {
    }

    static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

}

4.JDK中的设计模式

  1. 单例模式:RuntimeException
  2. 静态工厂:Integer a = Integer.valueOf(int or String)
  3. 迭代器模式:Collection.iterator()
  4. 适配器模式:InputStreamReader和outputStreamWriter
  5. 装饰器模式:Reader 和 bufferdReader
  6. 代理模式: SpringAOP
  7. 工厂模式:SpringIoc

适配器模式:将一个接口适配到另一个接口,Java I/O中InputStreamReader将Reader类适配到InputStream,从而实现了字节流到字符流的准换。
装饰者模式:保持原来的接口,增强原来有的功能。
FileInputStream 实现了InputStream的所有接口,BufferedInputStreams继承自FileInputStream是具体的装饰器实现者,将InputStream读取的内容保存在内存中,而提高读取的性能。

上一篇 下一篇

猜你喜欢

热点阅读