设计模式总结
参考链接:链接地址
目录
总览
六大原则
总概括
创建型模式:
- 工厂模式是为了对使用者隔离对象创建的过程。
- 抽象工厂模式是为了创建一组相关或者是相互依赖的对象提供一个接口。(比如卖苹果:有采摘苹果,装进苹果盒子里的步骤,其他水果可能有不一样的步骤。)
- 建造者模式与工厂模式相似,不过关注具体实现,工厂模式比较宏观。(比如:卖水果分为1 收钱,2 给人家水果(工厂模式);采摘水果要1 坐车去果园,2 挑大的成熟的,3 装进水果车 等等…(建造者模式))
- 单例模式是为了解决一个全局使用的类频繁地创建与销毁。
结构型模式:
- 适配器模式为了是将属性合并。(已有功能,橘子用苹果盒子)
- 桥接模式是为了将属性分离,便于组合使用。(设计的功能,不同大小不同材质盒子便于组合)
- 装饰器模式为了在不影响主流业务前提下,增加属性(功能)。(给盒子上添加防伪标识)
- 代理模式是为了使用不能直接使用的功能。(代购美国苹果,买家找不到美国苹果公司)
- 组合模式是为了减少相似的对象,减少数据类型。(省市区的存储)
- 外观模式是为了糅合功能,减少使用者学习成本。(采摘,打包等不需要关注,只要交钱就行)
行为型模式:
- 模板方法模式是为了方便扩展未知功能,模糊设置功能,到子类中具体实现(继承)。(增加新的付款方式,比如刷脸支付)
- 策略模式是为了通过注入对象,改变行为,spring ioc同样思想。(选择不同优惠算法(new FullDiscount),有不同优惠活动)
- 责任链模式是为了方便处理多个对象处理同一个请求。(遍历所有优惠活动看符合哪个优惠活动)
- 观察者模式是为了一个对象改变通知其他对象,JDK有支持(Observer)。(澳洲龙虾有货了发短信来买吧)
- 命令模式是为了将不符合抽象编程的转为抽象编程,(增加抽象类)用于解耦。(热门榜单和价格榜单的修改)
- 访问者模式是为了利用双重分派,在多态重载中识别集合中的具体类型。
双重分派: 多态重载分辨不出对象类型,所以用具体对象接收要执行的方法,在具体对象内部执行要执行方法。
全部以买水果举例
1.工厂模式(创建型模式)
简单工厂模式(不属于23种设计模式)
- 我吃水果交给一个工厂,每次吃去工厂(new出来,需要实现取水果接口)选择水果品种得到苹果。
- 品种变多时候向里面添加。
Fruit fruit = new fruitFactory(TYPE_APPLE);
或者
Fruit fruit = new fruitFactory();
fruit.getApple();
工厂模式
- 当水果越来越多的时候工厂不好管理,不符合单一职责,开闭原则。
- 所以每个水果单独建一个工厂。
fruit = new AppleFactory();
fruit = new OrangeFactory();
抽象工厂模式
- 加入包装盒之后,每个水果都有各自品种的包装盒,苹果有苹果包装盒,橘子有橘子包装盒,等等。
- 当我选苹果的时候可能会把苹果装错袋子,比如把苹果装到橘子的袋子里。
- 所以把苹果和创建苹果包装袋的方法都放到一个工厂里。
Factory factory = new AppleFactory();
Fruit fruit = factory.getApple();
Pack pack = factory.getPack();
pack.putBag(fruit);
建造者模式(关注于类内部的实现)
- 如果有套餐,需要有一个建造类(需要实现一个建造接口,不同套餐都要实现这个接口),设置每个的价格,返回创建的套餐,还需要一个套餐类,设置水果套餐。
使用的时候:
2.单例模式(创建型模式)
饿汉模式: 一旦单例被创建就加载。(直接初始化)
懒汉模式:需要时候才被加载。(双重校验锁)
3.适配器模式(结构型模式)
- 卖橘子,橘子盒子不够了,想用苹果盒子替代,尺寸可能有区别,不能直接装,需要做一些改造(比如塞一点泡沫)。
- 就是卖桔子想用苹果的盒子,新增一个适配器(经过加工塞点泡沫)就能使用苹果的盒子了。
在使用时获取橘子盒子的方法中需要的是苹果盒子,但返回的却是橘子盒子。
4.桥接模式(结构型模式)
每个大中小袋子都实现大小型号,这个例子中有4个,材料有3种,使用的时候把材质注入到大小中就能使用。
5.装饰器模式(结构型模式)
实现原有功能,想增加装饰就继承这个类
继承:
6.代理模式(结构型模式)
别人想在我这买美国苹果,我让一个公司代理我去美国买,然后那个人去我的店里买美国苹果。
代理类:
7.组合模式(结构型模式)
把省市区递归存储,将最后一级(村)单独列出。
8.外观模式(结构型模式)
9,模板方法模式(行为型模式)
写一个主类,完成大概流程,不同支付方式继承主类完成具体操作。(重写pay方法)
10,策略模式(行为型模式)
11,责任链模式(行为型模式)
12,观察者模式(行为型模式)
jdk支持:
到货以后改变状态,发送通知。
13,命令模式(行为型模式)
继承command做具体实现。
14,访问者模式(行为型模式)
多态不能识别真实的类型时,使用双重分派。
接口中增加这个方法,然后实现这个接口后每个水果都有这个方法了。
没有了。