1.简单工厂(不是设计模式,是一种编程习惯)
由工厂类帮我们创建对象,客户只需要传入所需要创建对象的参数。解耦了由客户去创建对象的方式,把创建对象的能力交给工厂。
但是违反了开放封闭原则,因为需要增加对象的时候需要修改工厂类。
2.工厂方法模式
在简单工厂设计之上,把工厂类抽象出了一个接口,接口只定义规范,实现交给每种产品的工厂,让工厂专门负责对应产品的生产。遵循开放封闭原则。
3.抽像工厂模式
在工厂方法设计之上,再把工厂接口抽象成以一个顶级的工厂抽象类,使得可以根据需求创建不同的工厂。然后子工厂再去创建不同的对象。抽象工厂模式不单可以创建不同类型的对象,也可以创建不同种类的对象。工厂的工厂。
4.策略模式
定义了一系列算法,并将他们封装起来,是他们可以相互替换。优点就是策略类可以自由替换、易于扩展、避免使用if-else,充分体现面向对象的思想。
改造我们系统的登入方式。
抽象工厂+策略模式 解决不同方式登入的需求
定义一个type字段 有account:账号密码登入 sms:短信验证码登入 wechat:微信登入
并在配置文件中配置一个login-types字段前端传入的登入方式和spring容器中对应的策略类对象名称映射关系。
定义一个工厂类,实现ApplicationContextAware接口,定义一个Map存放具体的策略。在启动应用后就会去调用这个方法,把Bean加载到Map中。
最后再提供一个获取策略类的方法。
订单的支付策略(支付宝、微信、银行卡)。
解析不同类型的excel(xls格式、 xlsx格式)。
打折促销(满300元打九折,满500元打8折、。。。)
一句话总结:只要代码中有冗长的if-else 或者switch判断都可以采用策略模式。
5.设计模式的分类 和设计模式七大设计原则
创建型模式:主要特点是将对象的创建和使用分离。单例、原型、工厂方法、抽象工厂、建造者。
结构型模式:主要特点使用对象和类按照某种布局组成更强大的结构。代理、桥接、装饰、适配器、外观、享元、组合。
行为型模式:用于描述对象和类之间怎么相互协调共同完成单个对象无法独立完成的任务。模板方法、策略、命令、责任链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器。
单一职责
降低类的复杂度,一个类只负责一项职责
降低类的可读性,可维护性
通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则。
接口隔离
一个类对另外一个类的依赖应该建立在最小的接口上
依赖倒置
高层模块不应该依赖底层模块,二者都应该依赖其抽象
抽象不应该依赖细节,细节应该依赖抽象
依赖倒置中心思想是面向接口编程
里氏替换
在继承时,尽量不要去重写父类的方法。
开闭 ocp
扩展开放,修改关闭
迪米特
降低类之间的耦合
合成复用
6.类图
类图是现实了模型的静态结构。特别是模型中存在的类、类的内部结构以及他们与其他类的关系。类图是面向对象建模的主要组成部分。
Dependence 依赖关系
类中用到了对方
如果是类的成员属性
如果是方法的返回类型
是方法接受的参数类型
方法中使用到的
Generalization 泛化关系
泛化关系实际上就是继承关系,他是依赖关系的特例
Implementation 实现关系
实现关系实际上就是A类实现B类,他是依赖关系的特例
Association 关联关系
关联关系实际上就是类与类之间的联系,他是依赖关系的特列
具有一对一,一对多,多对多的关系
Aggregation 聚合关系
表示整体和部分的关系,整体与部分可以分开。是关联关系的特例
Composition 组合关系
表示整体与部分的关系,但是整体与部分不可以分开。是关联关系的特例
7.单例模式
定义:采用某种方式,使某个类在整个系统中只有一个对象。
饿汉式(静态常量)
在类装载的时候对象就创建好了,缺点是造成内存浪费
饿汉式(静态代码块)
也是在类装载的时候创建对象,缺点也是造成内存的浪费
懒汉式(线程不安全)
使用的时候再去创建,存在线程安全问题
懒汉式(线程安全,同步方法)
解决了线程安全问题,但是效率太低了
懒汉式(double check lock 双重检查锁)
解决了线程安全,效率高
静态内部类完成单例模式
外部类在加载的时候内部类不会被马上加载,当调用的时候才会加载,jvm帮助我们保证了线程的安全性。
枚举
jdk1.5添加的枚举,能避免线程安全问题,还能方式反序列化重新新的对象,提倡使用。
最后在jdk中Runtime使用了单例模式,基于懒汉式创建的对象。
8.简单工厂模式
定义:定义了一个创建对象的类,由这个类来封装实例化对象的行为。
9.工厂方法模式
定义了一个创建对象的方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。