设计模式

设计模式是对封装、继承、多态的运用;目的是高内聚低耦合,便于代码维护和拓展。

 

结构模式:

组合模式    树枝和叶子继承于抽象构建,树枝组装,树叶操作方法,树枝遍历子节点操作子节点方法

享元模式   公用内部相同不变对象,传入外部可变对象

外观模式    访问者,访问外观窗口类,窗口类调用各子系统具体实现

装饰模式   把具体构件作为具体装饰的一个属性,具体装饰可调用具体构建方法,也可调用具体装饰的方法

桥接模式   作用类中加接口属性,实现接口,作用类调用实现接口方法。实现接口作为桥。

适配器模式   目标接口,适配者类,适配器类实现多重继承 /  或对象适配

代理模式     代理类,实现抽象主题,实现抽象主题方法,前置处理实现方法,处理具体主题方法,后置处理代理类方法

 

创建模式:

单例模式  私有构造器,对外提供访问方法,分为类初始化加载和访问时加载

建造者模式    new创建者、new指挥者传入创建者、指挥者调组装构建方法,构建者组装构建,返回产品

原型模式  原型模式的克隆分为浅克隆和深克隆,Java 中的 Object 类提供了浅克隆的 clone() 方法,具体原型类只要实现 Cloneable 接口就可实现对象的浅克隆

工厂方法模式    抽象工厂,抽象产品,具体工厂创建具体产品

抽象工厂模式  跟工厂方法类似,抽象工厂含多个产品族,每个具体工厂管理一个产品族

 

行为模式:

模板方法模式         父类实现不变方法,抽象可变方法;子类实现抽象可变方法

策略模式        父类抽象策略,多子类实现策略;子类向上转型,父类调用子类的实现方法

命令模式      抽象请求,多子类实现请求;子类请求调用执行类某个执行方法

责任链模式       抽象责任父类,实现不同责任子类,每个子类确定下一个子类节点,处理或传递给下一个

状态模式       环境类存放抽象状态,初始化状态,环境类方法调用当前状态方法,改变环境类中得具体状态

 观察者模式      通过 java.util.Observable 类和 java.util.Observer 接口定义了观察者模式,状态发生改变,通知各观察者产生行为

1. Observable类

Observable 类是抽象目标类,它有一个 Vector 向量,用于保存所有要通知的观察者对象,下面来介绍它最重要的 3 个方法。

  1. void addObserver(Observer o) 方法:用于将新的观察者对象添加到向量中。
  2. void notifyObservers(Object arg) 方法:调用向量中的所有观察者对象的 update。方法,通知它们数据发生改变。通常越晚加入向量的观察者越先得到通知。
  3. void setChange() 方法:用来设置一个 boolean 类型的内部标志位,注明目标对象发生了变化。当它为真时,notifyObservers() 才会通知观察者。

2. Observer 接口

Observer 接口是抽象观察者,它监视目标对象的变化,当目标对象发生变化时,观察者得到通知,并调用 void update(Observable o,Object arg) 方法,进行相应的工作。

中介模式      中介类管理同事类集合,中介类注册同事类,给同事类赋值中介,某个同事发送消息,由中介类转发遍历同事集合接受消息

迭代器模式     提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

访问者模式        结构类聚合元素,结构类接收具体访问者,结构类遍历聚合元素,元素调用具体得访问者,执行

备忘录模式       发起者设置状态,管理者调用发起者保存状态,发起者调用管理者恢复状态

解释器模式     如果要对数据表达式进行分析与计算,无须再用解释器模式进行设计了,Java 提供了以下强大的数学公式解析器:Expression4J、MESP(Math Expression String Parser) 和 Jep 等,它们可以解释一些复杂的文法,功能强大,使用简单。

 

设计模式七大原则:

开闭原则         当对扩展开放,对修改关闭

依赖倒置原则       高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象

单一职责原则       一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分

接口隔离原则       将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。

合成复用原则       要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现

里氏替换原则       子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。

迪米特法则     两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

posted @ 2018-04-28 14:38  MrLiJavaEngineer  阅读(115)  评论(0编辑  收藏  举报