HIT软件构造第五章第二节知识点总结

文章目录

  • 二.面向可维护性的设计模式
    • 1.创建模式
      • A.工厂方法模式
      • B.抽象工厂模式
    • 2.结构模式
      • A.代理模式
    • 3.行为模式
      • A.观察者模式
      • B.访问者模式
    • 4.设计模式总结

  接着上一篇来讨论,本文章的重点是面向可维护性的设计模式。

二.面向可维护性的设计模式

1.创建模式

  这些类的作用主要就是为了创建对象,对应采取的模式就是不同的创建模式,分为以下几种模式。

A.工厂方法模式

  使用ADT的时候,如果我们想创建一个对象,我们就要调用构造函数,而构造函数不会在接口中而是在实现类中,因此抽象程度降低了,而且导致用户可能会依赖于这个实现类的实现方式,而不是接口。为了解决这些,工厂模式应运而生。
  我们也可以说其实就是对构造函数的包装(就像之前对其他字段或方法的包装一样),包装到一个新的类中,从而实现隐藏了这个原始类的类名,新的类一般只有一个方法,那就是用来构造原有类的对象。
  另外还有一种实现的结果相同的方法,就是在原始的类中添加静态工厂方法,同时将构造方法设置为私有。
HIT软件构造第五章第二节知识点总结_第1张图片

B.抽象工厂模式

  相比于普通的工厂方法模式中,一个工厂就用于创造一个类的对象,其实抽象方法模式就是变成了一个工厂可以创建一组类的对象,不过创建的搭配是固定好的。
  我们可以举下列在麦当劳点餐的例子来大致说明:
  对于普通的,没有使用创造模式的情况,我们就是这样点:一个奥尔良鸡腿堡,一个中可乐。我们提出需求时就直接是知道了具体的类,比如是奥尔良鸡腿堡,而不是通过它的父类“汉堡”。
  而工厂方法模式,我们是这样点:有一个个优惠卷,每个卷有对应的产品。我们给服务员这些卷,让他们拿出对应的产品,而我们不再需要知道这些产品的名字。通过优惠卷信息的不同,通过不同的工厂去创造对应的对象。
  而抽象工厂模式,我们是这样点:有一个个优惠卷,里面都是一个套餐。我们同样不用知道这些套餐中任何一个产品的名字,但是这些产品是绑定在这一个套餐之内的了,我们不再能一个个产品的去点,但是这样我们创建的时候对固定的模式更方便。

2.结构模式

  通过改变类之间的结构,让类呈现新的功能。

A.代理模式

  有的时候我们在创建一个类的对象时,就要进行一定的操作,而有的时候这个操作很费时间,而操作不一定必须,则此时我们就可以创建一个对应的包装,来实现将所谓的这个操作和对象的创建分隔开。
  下面是一个很好的例子。
  首先这张图说明在创建这个图片的时候,就调用了loadfromDisk这个需要花费很多时间的操作。
HIT软件构造第五章第二节知识点总结_第2张图片
  如果我们想要实现仅仅是创建一个对象而不是立刻执行加载操作,则可以执行如下操作:创建一个虚拟的了类,构造方法中不再有display而是挪到了外面,通过委托的机制进行调用。
HIT软件构造第五章第二节知识点总结_第3张图片

  代理模式与适配器模式的区别:前者的目的是解决私密问题和耗费过大的问题,而后者的目的主要是消除不匹配,让客户端和内部的类以统一的方式建立联系。

3.行为模式

  行为性模式主要用于描述类或对象的交互以及职责分配。

A.观察者模式

  总的来说就是一种一对多,类似于广播的模式。
  在被观察者中,应该有添加观察者和删除观察者的操作(用于将观察者与被观察者之间建立联系),还有就是将信息通知给观察者的操作(notify)。对于观察者,也该有更新状态的操作(当然是由被观察者的notify来操作)
HIT软件构造第五章第二节知识点总结_第4张图片  例子如下所示,观察者即为被观察者中的一个列表。通过调用观察者的update操作来实现notify操作。(当然这里不能删除被观察者)
HIT软件构造第五章第二节知识点总结_第5张图片
  粉丝(被观察者)的例子如下,subject属性代表着对应的被观察者所观察的观察者。
HIT软件构造第五章第二节知识点总结_第6张图片
  当然,java中提供了Observer接口和Observable抽象类,类似于迭代器模式。

B.访问者模式

  总的来说,访问者模式就是,被访问者中的某个具体的操作,因为各种原因,去委托给另外的类进行完成。委托给的类就是访问者。
  我们还是用例子来说明,不然太抽象。
  首先这是第一棵继承树,是被访问的那个类。其中要有accept方法,参数是访问类的对象,通过accept方法来让其访问。
HIT软件构造第五章第二节知识点总结_第7张图片
  而第二棵继承树就是访问类了。其中要有visit方法,通过多态实现取分访问不同类型的对象从而有多种实现,而实现中即可以正常的写业务逻辑了。这个例子相当于把每种物品的计算价格的操作委托给了另一个类,这也就是访问者模式最主要的目的。
HIT软件构造第五章第二节知识点总结_第8张图片
  与迭代器模式的区别:迭代器模式主要是进行一个个的访问,而访问者模式主要是被访问者将对应的某种功能的实现交给访问者,客户端可以灵活的改变访问者中的操作算法。

4.设计模式总结

  虽然设计模式种类很多,但是抽象出的类与类之间的关联效果,都是如下两张图所示。
  首先是单一继承树的情况。
HIT软件构造第五章第二节知识点总结_第9张图片
  其次是两颗继承树的情况。
HIT软件构造第五章第二节知识点总结_第10张图片
  至于如何去取分这些样式相同的模式,主要是通过它里面方法的不同,就类似于大家都是人,但是由于自身能做的事情不同,因此有不同的职业一样。

你可能感兴趣的:(java,软件开发)