设计模式
设计模式是对封装、继承、多态的运用;目的是高内聚低耦合,便于代码维护和拓展。
结构模式:
组合模式 树枝和叶子继承于抽象构建,树枝组装,树叶操作方法,树枝遍历子节点操作子节点方法
享元模式 公用内部相同不变对象,传入外部可变对象
外观模式 访问者,访问外观窗口类,窗口类调用各子系统具体实现
装饰模式 把具体构件作为具体装饰的一个属性,具体装饰可调用具体构建方法,也可调用具体装饰的方法
桥接模式 作用类中加接口属性,实现接口,作用类调用实现接口方法。实现接口作为桥。
适配器模式 目标接口,适配者类,适配器类实现多重继承 / 或对象适配
代理模式 代理类,实现抽象主题,实现抽象主题方法,前置处理实现方法,处理具体主题方法,后置处理代理类方法
创建模式:
单例模式 私有构造器,对外提供访问方法,分为类初始化加载和访问时加载
建造者模式 new创建者、new指挥者传入创建者、指挥者调组装构建方法,构建者组装构建,返回产品
原型模式 原型模式的克隆分为浅克隆和深克隆,Java 中的 Object 类提供了浅克隆的 clone() 方法,具体原型类只要实现 Cloneable 接口就可实现对象的浅克隆
工厂方法模式 抽象工厂,抽象产品,具体工厂创建具体产品
抽象工厂模式 跟工厂方法类似,抽象工厂含多个产品族,每个具体工厂管理一个产品族
行为模式:
模板方法模式 父类实现不变方法,抽象可变方法;子类实现抽象可变方法
策略模式 父类抽象策略,多子类实现策略;子类向上转型,父类调用子类的实现方法
命令模式 抽象请求,多子类实现请求;子类请求调用执行类某个执行方法
责任链模式 抽象责任父类,实现不同责任子类,每个子类确定下一个子类节点,处理或传递给下一个
状态模式 环境类存放抽象状态,初始化状态,环境类方法调用当前状态方法,改变环境类中得具体状态
观察者模式 通过 java.util.Observable 类和 java.util.Observer 接口定义了观察者模式,状态发生改变,通知各观察者产生行为
1. Observable类
Observable 类是抽象目标类,它有一个 Vector 向量,用于保存所有要通知的观察者对象,下面来介绍它最重要的 3 个方法。
- void addObserver(Observer o) 方法:用于将新的观察者对象添加到向量中。
- void notifyObservers(Object arg) 方法:调用向量中的所有观察者对象的 update。方法,通知它们数据发生改变。通常越晚加入向量的观察者越先得到通知。
- void setChange() 方法:用来设置一个 boolean 类型的内部标志位,注明目标对象发生了变化。当它为真时,notifyObservers() 才会通知观察者。
2. Observer 接口
Observer 接口是抽象观察者,它监视目标对象的变化,当目标对象发生变化时,观察者得到通知,并调用 void update(Observable o,Object arg) 方法,进行相应的工作。
中介模式 中介类管理同事类集合,中介类注册同事类,给同事类赋值中介,某个同事发送消息,由中介类转发遍历同事集合接受消息
迭代器模式 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
访问者模式 结构类聚合元素,结构类接收具体访问者,结构类遍历聚合元素,元素调用具体得访问者,执行
备忘录模式 发起者设置状态,管理者调用发起者保存状态,发起者调用管理者恢复状态
解释器模式 如果要对数据表达式进行分析与计算,无须再用解释器模式进行设计了,Java 提供了以下强大的数学公式解析器:Expression4J、MESP(Math Expression String Parser) 和 Jep 等,它们可以解释一些复杂的文法,功能强大,使用简单。
设计模式七大原则:
开闭原则 当对扩展开放,对修改关闭
依赖倒置原则 高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象
单一职责原则 一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分
接口隔离原则 将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。
合成复用原则 要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现
里氏替换原则 子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。
迪米特法则 两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。