23种设计模式

目录

 一、前言                                                                                        

二、设计模式的设计原则

三、创建型模式

1、单例模式

2、抽象工厂模式

3、建造者模式

4、工厂方法模式

5、原型模式

四、结构型模式

1、适配器模式

2、桥接模式

3、装饰器模式(包装器模式)

4、组合模式

5、外观模式

6、享元模式

7、代理模式

五、行为型模式

1、策略模式

2、模板方法模式

3、观察者模式

4、迭代器模式

5、责任链模式

6、命令模式

7、备忘录模式

8、状态模式

9、访问者模式

10、中介者模式

11、解释器模式


 一、前言                                                                                        

设计模式是一套反复使用的代码的总结,描述了问题及解决方案,使用设计模式可以提高代码的可重用性、代码的可读性和代码的可靠性。

二、设计模式的设计原则

  1. 单一职责原则:一个类只负责一个职责,避免多个职责混杂。
  2. 里氏替换原则:子类可以替换其父类。
  3. 依赖倒置原则:高层不应该依赖具体,而应该依赖接口或抽象类。
  4. 接口隔离原则:用多个专门的接口,而不用单一的总接口。
  5. 迪米特法则:一个对象应该对其他对象有最少的了解。
  6. 开闭原则:一个类对扩展开放,对修改关闭。在程序需要拓展时,不需要修改原来的代码。
  7. 合成复用原则:是尽量使⽤合成/聚合的⽅式,⽽不是使⽤继承

三、创建型模式

创建型模式主要关注对象的创建方式

1、单例模式

①饿汉式:在声明字段时创建实例,线程安全,但是上来就占用内存

②懒汉式:用的时候判断为null则创建实例,虽然延迟加载,但是线程不安全

③双重验证锁:懒汉式加锁,延迟加载且线程安全

④静态内部类:可以同时保证延迟加载和线程安全。

2、抽象工厂模式

创建多个⼯⼚类,提⾼⼯⼚的扩展性,增加产品只需要加一个工厂类,而不是修改唯⼀的⼯⼚类

3、建造者模式

建造者将一个复杂对象的构建细节进行封装,StringBuilder就属于建造者模式

4、工厂方法模式

①普通⼯⼚模式:⼯⼚类一个方法可以创建多种对象
②多个⼯⼚⽅法模式: 提供多个⼯⼚⽅法,分别创建对象

③静态工厂方法模式:静态方法,最常用

5、原型模式

对原型对象进⾏复制、克隆产⽣类似新对象。实现 Cloneable 接⼝后,重写 Object clone⽅法。 Object类的clone⽅法是⼀个本地⽅法,直接操作内存中的⼆进制流,所以性能比new对象好

四、结构型模式

结构型模式主要关注如何组合和布局对象

1、适配器模式

①类的适配器模式:当一个原有类与需要的接口不符,创建⼀个新的类继承原有类并实现接口
②对象的适配器模式:当一个原有类与需要的接口不符,创建⼀个新类实现接口,持有原类实例,用的时候调用
③接⼝的适配器模式:不希望实现⼀个接⼝中所有的⽅法,创建一个抽象类实现所有方法,其他类不用实现这个接口,而是继承创建的抽象类就可以了

2、桥接模式

抽象层与实现层分离,使他们可以各⾃独⽴的变化。比如将设备品牌有华为的、联想品牌的等等,设备类型还分为手机、电脑、平板等,就可以通过桥接模式设计结构。

3、装饰器模式(包装器模式)

在不影响原始对象的情况下,为其添加新的功能。

4、组合模式

又叫部分整体模式,类似树形结构,是将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示。比如:有一个抽象地址类  实现类有地址组、ipv4地址、ipV6地址 等,地址组对象存放自己里面的抽象地址类。

5、外观模式

可以理解为将所有的操作都集成到一个类里面。

6、享元模式

相同对象只要保存一份,String 常量池、数据库连接池、缓冲池等等都是享元模式的应用

7、代理模式

①静态代理:与装饰器模式不同的是,静态代理类与原来的类要实现相同接口

②动态代理:动态代理类可以代理实现接口下的同级类,用到反射

③Cglib 代理:代理类继承目标类

五、行为型模式

行为型模式主要关注对象的行为以及对象之间的交互方式

1、策略模式

定义算法族,分别封装起来,可以在不修改原代码的情况下,灵活增加新算法,缺点是需要知道所有策略算法的区别,使用适合的算法类。

2、模板方法模式

抽象定义了一个操作中的算法骨架, 在派生类中写每一个算法的具体实现逻辑。

比如:启动电脑需要先激活cpu,然后寄存器检测、然后SRAM检测等等,而不同品牌的电脑执行这些有不同的逻辑,在抽象类电脑中创建电脑启动方法,电脑启动方法中调用激活cpu,然后寄存器检测、然后SRAM检测等方法,而调用的方法只需要定义为抽象的,这些具体实现由派生类自己实现。

3、观察者模式

还叫发布-订阅模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。

4、迭代器模式

迭代器模式能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

5、责任链模式

也叫职责链模式,将请求沿着链进行处理。

javax.servlet.Filter#doFilter   就是责任链模式

6、命令模式

将命令发出者和执行者解耦,Runable就是非常经典命令模式。

7、备忘录模式

保存对象某个时间的状态,在适当的时候恢复。

8、状态模式

将传统的判断(通过if或者switch判断状态)改为将各状态提取为不同对象,同一时间不同状态做出不同行为。

9、访问者模式

访问者模式把数据结构和作⽤于结构上的操作解耦合,使得操作集合可相对⾃由地演化。

10、中介者模式

中介者模式是迪米特法则的典型代表, 定义一个中介对象来封装一些列对象之间的交互,使原有的对象见解耦。

11、解释器模式

定义了一个解释器,用来解释规定表达。

你可能感兴趣的:(java基础,java,设计模式)