首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

JAVA与形式-BJ

2012-09-16 
JAVA与模式-BJ1.OCP开-闭原则,即设计模块时,应该使模块可在不被修改的前提下被扩展.(即不修改源代码的情况

JAVA与模式-BJ

1.OCP开-闭原则,即设计模块时,应该使模块可在不被修改的前提下被扩展.(即不修改源代码的情况下改变模块的行为)

2.里氏代换原则,任何基类出现的地方,子类都可以出现

3.依赖倒转原则,依赖于抽象,不要依赖于实现(一般性/通用性---特例)

4.合成/聚合复用原则CRP,尽量使用合成/聚合,而不是继承关系达到复用目的

?? (在新对象中使用已有的对象,使之成为新对象的一部分,新对象通过委派这些对象达到复用)

5.--具体类不是用来继承的(继承关系形成的等级结构中,树叶结点都应为具体类,树枝结点都应为接口/抽象类)

6.--具体类B继承于具体类A的重构--将A、B的共同点抽象成抽象类/接口C,A、B继承于C

???? (抽象类中应拥有尽可能多的共同方法,应拥有尽可能少的数据)

7.耦合关系:

?? (1)零耦合

?? (2)具体耦合--发生在两个具体类之间,当一具体类直接引用另一具体类时.

?? (3)抽象耦合--发生在具体类和抽象类/接口之间,这种耦合有灵活性

8.静态类型static/明显类型apparent---变量声明时的类型

?? 实际类型actual

9.?抽象类+接口-->适配器 :java语言API中有很多适配模式,命名规范为Abstract+接口名,例AbstractMap等

10.接口隔离原则ISP --?使用多个专门的接口,比使用单一的总的接口要好

11.单例

?(1) 一些资源管理常常设计成单例模式,如系统中的配置文件的管理,设计成单例可使配置文件只加载一次,不必读一次加载一次

?(2)单例对象的条件:1.只有一个实例2.单例类必须自己创建自己的实例3.单例类必须给所有其他对象提供这一实例

?(3)应用:

???? a.单例对象自己引用单例对象本身.

???? b.单例对象作为一个聚集(map),而聚集存储的元素是其他对象

???? c.单例对象作为一个聚集(map),聚焦存储的元素是单例类本身的实例(多例)

12.java.util.Properties和ResourceBundle区别是Properties不支持多语言

----Locale代码=语言代码+地区代码(如:en_US/en_GB),Resource文件命名规范是shortname_Locale代????????????

???? 码.properties

13.建造模式Builder---用于产品的建造需要一步一步实现的情况(或者产品的某属性依赖于其他属性的建造)

角色:

抽象建造角色Builder:通过产品的建造过程所抽象出的产品的具体零件的建造方法(一般建造方法与零件个数相同)

????????????????????????????? 以及一个返回建造后的产品实例的retrieveProduct方法

具体建造角色ConcreteBuilder:包含对应的具体产品的对象,并实现抽象建造角色的建造方法,具体建造角色负责建造其所

???????????????????????????????????????????? 维护的产品及返回建造后的产品实例(具体建造角色可继承自适配器)

?

具体产品角色Product1:具体产品角色可继承某标记接口Product

导演类(Director):包含一个建造角色Builder,以及一个建造方法construct,该方法按照产品的建造顺序一点一点建造产品

客户端----------->创建一个具体产品(零件未被建造),创建一个其对应的产品建造者,将产品交由产品建造者,然后将建造者交

???????????????????????? 给导演者Director,然后调用导演者的建造方法construct来一步一步建造产品.????????

14.原始模型(Prototype)模式:通过给出一个原型对象来指明要创建对象的类型,然后用复制原型对象的办法创建更多同

????????????????????????????????????????????? 同类型的对象.

--JAVA语言的构件模型直接支持原始模型模式,即Object的clone方法,但是被复制的对象必须实现一个标识接口??

? Cloneable,否则编译器会抛出CloneNotSupportedException

--浅复制/深复制

?? 浅复制只复制原型对象,而原型对象中所引用的其他对象不被复制(clone)

?? 深复制把原型对象以及原型对象中引用的其他对象都复制了一遍(注意深复制可有多层,注意循环引用)

--利用串行化实现深复制--先使对象实现Serialization接口,然后把对象的一个copy写到流中,再读出来重建对象

//串行化到字节缓冲区中ByteArrayOutputStream baos = new ByteArrayoutputStream();ObjectOutputStream oos = new ObjectOutputStream(baos);oos.writeObject(protoType);//并行化ByteArrayInputStream bais = new ByteArrayInputStream();ObjectInputStream ois = new ObjectInputStream(bais);Object deepCopyObject = ois.readObject();//注意:要保证原型对象以及其引用的对象都是可串行化的,或者不可串行化的对象为transient的

?? ---串行化=冷冻=把对象写到Byte流里的过程Serialization

?????? 并行化=解冻=把对象从Byte流中读出来Deserialization

15.适配器模式(变压器模式)---对于一些不适用于某接口I的源类/接口,制做出对应的适配器,以适用于接口I

---目标(Target)角色:所期待的接口

---源(adaptee)角色:需要适配的类/接口...

---适配器(adapter):将源类/接口转换成目标接口(即使源类/接口能适用于目标接口)

?

---缺省适配模式(Default Adapter)---该模式用于为某接口提供缺省(空)实现,方便实现者只需要实现感兴趣的方法.

????????????????????????????????????????????????????? 适配器类应为抽象类,因为适配器类的实例没有意义,但适配器的方法都是具体方法

(注意:适配器模式与缺省适配模式的用意稍有不同)

?

?

?

?

?

?

?

?

?

?

?

?

热点排行