创造型模式
工厂方法
- 所谓工厂方法,就是用户想要获取一个抽象产品,但是我们不能暴露给他具体实现细节(比如说,我们不能直接让他调用实现类的构造函数)取而代之,我们为此抽象类专门做一个工厂方法,此工厂方法内选用不同的构造方法。即:把创建对象这个函数专门拎出来,变成一个抽象类,然后用户委托他去构造新对象。
- 比如说,我们有一个抽象类Trace,有两个具体实现FileTrace以及SystemTrace,当用户创建一个Trace时,他必然要选择这二者之一的构造器进行构造。但是这就暴露了我们的内部实现。
- 因此,我们不妨为Trace构造一个抽象工厂类(同抽象!)叫做Trace Factory,里面有俩方法,一个是getTrace(这个是默认构造器),还有一个是带参数的构造器,String。
- 在早工厂的时候,我们造多个具体工厂,分别实现上面的类,client在使用时,就第哦啊用一个具体工厂的方法去做即可,这样他并不知道我们的Trace是怎么实现的,隐藏了细节。
结构型模式
Adapt模式
- 即复用别人的代码,别人的代码肯定写的接口和要用的不一样,因此我们需要写一个适配器,在适配器里委派别人的代码做事。而client,通过委派客户端来实现相应功能。
- 当然,也可以使用继承,来替代委托。
- 继承,不仅仅是复用,更代表着二者之间的关系。
装饰器 - 不改变结构的情况下,为对象增加新的职责。
- 装饰器Decorator:接口,定义装饰物执行的公共操作。Decorator抽象类是所有装饰类的基类,内含一个delegation,用于委派工作。它是一个抽象类,有一个抽象函数,用于具体的装饰类去实现。装饰器基类。
- 装饰器在运行时间才添加特性,而继承在编译时就已经确定了。装饰器是多种物体的协作,而继承则是单一物体。装饰器通过混合不同的装饰器,获取预期的特性。
- 策略模式,实际上就是一个ADT内某函数有多种实现方法,这个时候我们把这个函数给提到外面来,作为一种委托,完成ADT的功能。之所以这样做,好处是可以灵活选择不同的策略,而无需更改我们的ADT代码,做到了OCP。同时,这个使得我们拓展性变好,我们想要增加新策略的时候,只需要把委托那部分来一个实现子类就行了。
- 算法接口,客户端根据接口写程序。
- 这似乎与策略模式很相像略模式是某一种算法,我在内部预留一个接点,使用委托,委托外部的对象为我做事,用户可以对外部对象给我委托者,进而实现不同的算法。
- 而访问者模式,并不是一种算法,而是操作,更多的是,在集合中对所有本类型的类型的一种统一操作。
- 更好的是,外部的访问者不一定只针对本类型有操作,还可以拓展至别的类型,这样的话,我们就可以处理一个混合类型的集合了。
- 也许我们可以不把这些类型的操作放出去,但这样的话,就不可变了(OCP)
- 更换visitor具体实现,即可改变算法。
- visitor站在client的角度,对ADT操作进行配置;而strategy站在内部ADT角度,对内部功能进行不同配置。
- 接口不是为了复用,是为了一种规约,一种交流,代表实现我这个接口,代表我有了哪些操作功能,而继承则更多的是复用父类的代码(经常需要抽象出一个基类,比如多种装饰器,需要抽象出一个基类的Decorator,避免代码重复)
- 接口代表者分离实现,使得client面向接口编程。
行为模式
策略模式
几个思考
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92146 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!