老师在上课是像我们详细介绍了几种设计模式,但对于为什么采用设计模式提到的却比较少,使得在做实验时有时候会很疑惑为什么要这么写,这么写难道不更复杂吗?了解设计模式的作用及优缺点会更有益与对设计模式的选用。本文介绍的有工厂模式,适配器模式,装饰器模式,策略模式,观察者模式以及访问者模式。
工厂模式
意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
优点: 1:工厂模式是为了解耦:把对象的创建和使用的过程分开。就是Class A 想调用 Class B ,那么A只是调用B的方法,而至于B的实例化,就交给工厂类。2:一个调用者想创建一个对象,只要知道其名称就可以了:,而不需要了解具体的实现。
适配器模式
意图:使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
优点:1:可以让任何两个没有关联的类一起运行。 2:提高了类的复用。
缺点:由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
装饰器模式
意图:动态地给一个对象添加一些额外的功能。
优点:装饰模式是继承的一个替代模式,装饰类和被装饰类可以独立发展,不会相互耦合。
缺点:多层装饰会很复杂,会写一句很长的代码。
策略模式
意图:使得一系列作用相同的方法可相互替换。
优点: 1:算法可以自由切换。2:扩展性良好。
缺点: 1:策略类会增多。 2:所有策略类都需要对外暴露。
观察者模式
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
优点: 1:观察者和被观察者是抽象耦合的。 2:建立一套触发机制。
缺点: 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
访问者模式
意图:将数据结构与数据操作分离。例如用一笔钱去买书和菜,书的价格是每本多少钱,菜是每斤多少钱,二者的计算方法并不一样。
优点: 1:符合单一职责原则。 2:优秀的扩展性。 3:灵活性。
缺点: 1:具体元素对访问者公布细节,违反了迪米特原则。 2:具体元素变更比较困难。