美文网首页
Java23种设计模式

Java23种设计模式

作者: 何止搬砖工 | 来源:发表于2020-07-12 02:54 被阅读0次

GOF23(group of four)

一、设计模式知识

面向对象设计原则

1.开闭原则
2.里氏替换原则
3.依赖倒置原则
4.单一职责原则
5.接口隔离原则
6.迪米特法则

开闭原则优点:

  1. 对软件测试的影响
    软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常运行。
  2. 可以提高代码的可复用性
    粒度越小,被复用的可能性就越大;在面向对象的程序设计中,根据原子和抽象编程可以提高代码的可复用性。
  3. 可以提高软件的可维护性
    遵守开闭原则的软件,其稳定性高和延续性强,从而易于扩展和维护。

二、设计模式分类

1.创建型的设计模式:

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

2.结构型设计模式:

装饰者模式(Decorator) 代理模式(Proxy) 组合模式(Composite) 桥连接模式(Bridge) 适配器模式(Adapter) 蝇量模式(Flyweight) 外观模式(Facade)

3.行为设计模式:

策略模式(Strategy) 、状态模式(State) 、责任链模式(Chain of Responsibility) 、解释器模式(Interpreter) 、命令模式(Command) 、观察者模式(Observer) 、备忘录模式(Memento) 、迭代器模式(Iterator) 、模板方法模式(Template Method) 、访问者模式(Visitor) 、中介者模式(Mediator)

三、实战

1.单例模式

5种
(1)饿汉式
优点:线程安全,调用效率高
缺点:不支持懒加载,类加载时初始化

public class Singleton {
    
    private static final Singleton ourInstance = new Singleton();
    private Singleton() {

    }
    public static Singleton getInstance() {
        return ourInstance;
    }
}

(2)懒汉式:
优点:支持懒加载
缺点:调用效率低(加锁导致,每次调用都有判断锁是否释放)

public class Singleton {

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

(3)静态内部类
优点:支持懒加载、线程安全、调用效率高
缺点:
public class Singleton {

public static class SingletonInner{

    private static SingletonInner ourInstance = new SingletonInner();

    public static SingletonInner getInstance() {

        return ourInstance;
    }
    private SingletonInner() {

    }
}

}

(4)双重锁:
优点:支持懒加载
缺点:(加锁导致,只有第一次调用需要判断锁是否释放)
public class Singleton {

private static volatile Singleton ourInstance;

private Singleton() {

}
public static Singleton getInstance() {

    if (null == ourInstance){
        synchronized (Singleton.class){
            if (null == ourInstance){
                ourInstance = new Singleton();
            }
        }
    }
    return ourInstance;
}

}
说明:需要volatile 修饰 ourInstance成员变量
原因:ourInstance=new Singleton();这句话创建了一个对象,他可以分解成为如下3行代码:

1、memory = allocate();  // 1.分配对象的内存空间
2、ctorInstance(memory);  // 2.初始化对象
3、ourInstance= memory;  // 3.设置sInstance指向刚分配的内存地址
上述伪代码中的2和3之间可能会发生重排序,重排序后的执行顺序如下:
1、memory = allocate();  // 1.分配对象的内存空间
2、ourInstance= memory;  // 2.设置sInstance指向刚分配的内存地址,此时对象还没有被初始化
3、ctorInstance(memory);  // 3.初始化对象

主要是会有两种情况:一种是先指向分配的地址再初始化对象,另一种是先初始化对象,再指向分配的内存地址。 
用volatile关键字指定为后者。

(5)枚举:
优点:线程安全、不能通过反射、反序列修改
缺点:不支持懒加载

public enum Singleton {
    ourInstance;
}

1.简单工厂模式

优点:简单,符合单一职责原则
缺点:不符合OCP 开闭原则,增加类的时候需要修改工厂类代码

public class AnimalFactory {

    private AnimalFactory(){

    }

    public static Dog creatDog(){

        return new Dog();
    }
    public static Cat creatCat(){

        return new Cat();
    }
}

2.工厂方法模式

优点:符合OCP 开闭原则
缺点:增加代码

image.png
调用:
  Animal  animal1 = new DogFactory().creat();
  Animal  animal2 = new CatFactory().creat();

相关文章

  • java23种设计模式—— 一、设计模式介绍

    Java23种设计模式全解析 一、设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有...

  • 动态代理原理解析

    注:源自于Android 一、代理模式 代理模式是java23种设计模式常用的一种设计模式。代理模式是客户端不直接...

  • 简单工厂模式

    Java23种设计模式--简单工厂模式 一、什么是简单工厂模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法...

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • 工厂方法模式

    Java23种设计模式--工厂方法模式 一、什么是工厂方法模式 工厂方法模式同样属于类的创建型模式又被称为多态工厂...

  • java23种设计模式

    java的设计模式大体上分为三大类:创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式...

  • java23种设计模式

    创建型 抽象工厂模式工厂方法建造者模式原型模式单态模式 结构型 适配器模式桥接模式组合模式外观模式装饰者模式享元模...

  • Java23种设计模式

    GOF23(group of four) 一、设计模式知识 面向对象设计原则 1.开闭原则2.里氏替换原则3.依赖...

  • 3-8 我的学习路线

    java学习流程 知乎 计算机网络 tcp/ip 数据结构 计算机系统 java23种设计模式 java基础,校...

  • java23种设计模式-策略模式

    策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包...

网友评论

      本文标题:Java23种设计模式

      本文链接:https://www.haomeiwen.com/subject/sncbcktx.html