-
设计模式分类
创建模式:工厂模式,单例模式,原型模式等 结构模式:适配器,组合,装饰器,门面,代理等 行为模式:模板方法,责任链,策略,观察者等
-
简单工厂,工厂方法,抽象工厂(创建模式)
简单工厂:提供一个静态方法,根据传入的不同参数创建不同的对象(同一个父类,不同实现) 工厂方法:需要两种或者以上的产品,提供一个接口,一个抽象方法,实现多个工厂,不同工厂生产不同类型的产品 对生产的产品做简单的分配,单从大范围来看,还是一种产品。 抽象工厂:需要生产一个产品族,来获得一个产品,产品族之间的产品是不能简单组合的,有兼容问题的; 这样一个产品族的产品最好就能出自同一个工厂,提供一个接口,里面定义生产产品族的所有产品的抽象方法, 每个工厂实现实现自己产品族的所有方法,不同的产品用不同的工厂即可。 区别: 1.简单工厂强调简单需要一个类型的不同实现 2.工厂方法强调需要使用多个工厂,对产品的简单分类,单其实还是属于一种类型产品 (例子:食物,我们分为两个工厂生产,分别生产中国食物和美国食物,用不同的工厂生产) 3.抽象工厂强调生产一个产品,但是这个产品是由很多组件的,那么这些这个产品的所有组件最好来着一个工厂 生产,这样避免组件之间有兼容问题。 (例子:生产一台电脑,一个电脑有cpu,内存条,那么同一个品牌的产品,最好定义自己的工厂; 工厂里面自己生产自己所有的子产品,最后构建一台电脑出来) 总结:工厂模式都是强调怎么去生产一种类型的对象,生产出来的对象是一个父类的,带着这个思路去思考。
-
单例模式(创建模式)
饿汉式:直接使用静态变量,直接创建一个对象即可,然后使用一个静态方法暴露出去 饱汉式:属于懒加载的方式,在需要时才去初始化,只要注意线程安全即可,建议使用双重检查的方式去使用同步块, 但是要注意重排问题,所以声明的静态变量加上volatile 枚举方式:将需要的对象定义在枚举中,在类加载就会进行实例化
-
代理模式(结构模式)
静态代理:代理类和被代理类对象是一种组合的关系,他们实现同一个接口,代理类的所有实现 都是内部调用被代理对象相应的方法,然后在调用前后做一些增强,更好控制被代理对象的访问, 让访问者与被访问对象进行解耦。 (缺点:每一个要实现代理的对象都要实现一个代理类,代码冗余,维护成本高) 动态代理:动态代理对象可以通过JDK代理一个类就能对所有对象生成代理类,比较通用,实现的功能和 静态代理一样的。
-
适配器模式(结构模式)
适配器模式:适配器模式强调的是两个不相关的类型,但是有相似的功能,需要做功能的嫁接,这个时候我们就需要 添加一个适配器类,适配器需要继承我们需要的类型,然后要嫁接的功能通过组合对象的方式组合进来, 然后再适配器的实现方法中调用组合对象的方法作为实现,这样就达到了类型转换的作用。 适配器和代理模式区别: 1.代理类的类型和被代理对象是同一种类型,而适配器不是 2.代理目的是为了方法增强,控制被代理对象的访问;适配器目的只是为了将相同功能的对象,通过适配器 作为类型的转换。
-
策略模式(行为模式)
策略模式:实现一个功能,有比较多的实现策略,需要不同场景和条件用到的实现是不同的. (开发中常用的SpringContext,注入容器,然后通过beanName获取不同实现)
-
模板方式模式(行为模式)
模板方法:场景一般是,会定义一个抽象类,一般抽象类中只有一个方法实现,其他都定义为抽象方法。 这个实现的方法就是模板方法,定义抽象方法的调用顺序,定义基本的规则,具体行为交给子类去实现。
-
责任链模式(行为模式)
责任链模式:一般比较强调流程的流转的场景,定义一个抽象类,内部定义一个属性指定下一个处理器,定义一个抽象处理请 求方法,然后将所有的处理器实现组成一个链表,每个实现是一个处理节点,用户发送请求,那么就会按照这个责任链 一个个节点流转处理。(强调多个实现之间的组合处理流程,不强调单个实现的使用,这是与策略模式的区别)
常见面试题之设计模式
猜你喜欢
转载自blog.csdn.net/weixin_38312719/article/details/106881791
今日推荐
周排行