美文网首页
head first 设计模式

head first 设计模式

作者: xinxinlimin | 来源:发表于2017-10-23 21:35 被阅读0次

    最近一段时间一直在看head first 设计模式,感触颇深,遂把其中之心得记录之,以便遗忘时重新熟悉。


    6种设计原则

    1.分离不变与可变:将可变元素提出,作为单独的模块,通过组合调用,不变的模块作为类。

    2.多用组合,少用继承

    3.面向接口编程,不要面向实现编程

    4.为了交互对象之间的耦合设计而努力


    设计模式

    分为创建性模式、指责型模式、行为型模式(本人所写设计模式完全根据书籍顺序)

    1.策略模式(行为型模式):

    类图(总图)

    题目描述:为每种鸭子设置动作,fly、swim、quick、display四个方法。我们首先想到的编程方法为两个鸭子(红头鸭、绿头鸭)继承自Duck抽象类,如下:

    类结构图

    需求改变了,要使红头鸭会飞,绿不会飞,想到可以覆盖duck中的fly方法,一个会飞,一个什么都不做。

    现在需求又变了,来了一百只鸭子,五十只会飞,其他不会飞。怎么办? 每个都覆盖?

    现在需求又变了,鸭子会了新的动作,会跳舞(dancing),怎么办?duck加,所有子类覆盖?

    显然是不现实的,软件的复用(关闭修改、打开扩展)显得尤为重要。

    既然鸭子的动作会变(不同的叫声、不同的飞行方式、不同的跳舞方式),而有些不会变(swim与display),由此我们可以分离不变与可变。将fly,quick提取,同时子类功能实现父类接口(面向接口编程),由此我们可以通过多用组合,少用继承(duck与fly、quick用组合)增加程序的伸缩性,并通过在抽象类中定义引用,然后通过set方法注入来完成组合。

    最后:注意一点,尽量不要在结构中出现new,用构造方法传参或者set注入在client中生成对象后注入,这样可以增加程序的灵活性,同时可以动态修改。

    对比 两者的动态性完全不同

    2. 观察者模式

    类图(总图)

    观察者模式实质上就是在主题中加入list,将观察者封装。(加入get的作用是观察者可自行取舍)。同时也可以看出:动态加入的只是接口引用,而非具体实现,所以改变一方,另一方不会受影响(为了交互对象之间的耦合设计而努力

    3. 装饰者模式

    相关文章

      网友评论

          本文标题:head first 设计模式

          本文链接:https://www.haomeiwen.com/subject/diiauxtx.html