模式与原则复习

在继承与组合的选择上,当用继承时,应保证基类或接口尽量的稳定,要不然接口一变化则所有的子类都被迫需要进行一定的改变。而用组合则可以避免这一问题,将变化封装起来变成脱离类继承体系的外部行为,某个子类需要拥有该行为时只要让其拥有该行为的一个实例,而对别的子类没有影响,同时需要面向接口编程,这样当需要的该行为发生变化时,只要变换注入的行为实体类就可以达到目的(策略模式)。(head first 设计模式 鸭子需要添加飞行行为和叫的行为)

为了交互对象之间的松耦合设计而努力,观察者模式则将主题对象和观察者解耦了。同时,在主题对象触发观察者的注册方法时,可以有推和拉两种传递状态数据的方式,推则是把需要提供的对象当成参数传出去,而拉则是把自身的引用穿出去,这个根据具体需要来选择。在一般的listener之类的场景则利用了观察者模式。

设计的开闭原则。除了继承,装饰者模式也可以达到扩展行为的目的,装饰者和被装饰的对象拥有同样的接口是为了获得类型上的一致。在装饰的方法中可以进行任意的变动,甚至把原来的方法给替换掉。


依赖倒置原则,和面向接口编程相比,这里更强调的是高层依赖底层的抽象而不是底层的具体实现,比如在工厂方法模式里通过继承将产品的创建和产品的使用分离开来,达到解耦的目的,而对产品的创建延迟到具体的子类去实现。在抽象工厂模式里,则是通过组合来进行解耦
的,产品的使用类,也就是高层,持有一个抽象工厂的引用便可以进行业务代码的编写,在运行时再根据具体的需要传入对应的具体工厂实现。在抽象工厂模式中,通常又是通过工厂方法模式来进行具体产品的创建。


命令模式,将命令的调用者和命令的执行者进行了解耦,命令对象封装了命令的执行者和一组相应的动作,命令的调用者不需要知道命令执行者的任何细节,而各个不同的执行者实现方式可以非常的多样化,只需要调用命令对象接口的执行方法。命令对象可以当成参数传进命令的调用者,同时可以给命令对象设定对应的undo方法,来回复命令执行之前的状态。另外,一组命令对象可以组成宏命令对象并当成普通命令对象来对待,这样可以一次性进行多个命令的调用。


适配器模式,目的在于把原有对象封装成客户需要的接口,从而达到解耦和方便使用的目的。而门面模式的出发点则是封装复杂,对外提供简单易用的接口,当然这也会带来解耦的好处。

模板方法模式,通过定义算法的框架来控制算法执行,同时达到算法复用的目的,在算法流中可以有具体方法,抽象方法(需要每个子类必须覆盖),钩子方法(hook方法,提供默认实现,子类可以选择实现)。与策略模式比较都是为了封装算法,但模板方法提供了算法的部分实现,而策略则是整个算法,另外策略模式基于组合来实现,而模板方法则基于继承。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值