软件设计模式

软件设计模式_第1张图片

一、简单工厂模式:

  • 优点:将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,实现了解耦合。代码更易维护。
  • 缺点:违背了OCP开闭原则,一旦添加新的功能就不得不修改工厂类的逻辑。
  • 例如:Customer类访问Restrant类进行点餐时,Customer需要知道Restaurant类的内部逻辑功能(内部有什么方法用于点菜(cookVegetable()、cookMeat()…))才能进行相应的点餐操作,但这样对于顾客来说过于繁琐,顾客其实不需要执行这么复杂的操作。我们可以增加一个工厂(点餐员),由点餐员通过对外暴露菜单(getOrder())来对接顾客,这样顾客想点什么菜品可以直接告知点餐员,由点餐员执行Restaurant相应的方法(cookVegetable()、cookMeat()…)来为顾客点餐,这样的优点是顾客不必了解Restrant内部具体的操作,减少了顾客的操作。

二、工厂方法模式:

为了解决简单工厂违反OCP的问题,提出了工厂方法模式:具体做法是把简单工厂中具体的工厂类,划分为抽象工厂层+具体工厂子类层。每次想要创建新的产品,就可以实现抽象工厂类来创建具体工厂子类,一个产品对应一个子类。这样对于服务器端来说不必再修改原有逻辑,就符合OCP开闭原则了。
优点:符合OCP开闭原则。
缺点:客户端需要创建具体工厂对象,而不用创建产品对象,这似乎又回到了不用设计模式的时候。
软件设计模式_第2张图片
软件设计模式_第3张图片

三、抽象工厂模式:

提供一个创建一系列对象的接口,而无需指定具体实现类。
与工厂方法模式的区别:抽象工厂中每个工厂可创建多种产品;而工厂方法模式中每个工厂只对应一类产品。

四、适配器模式:

如果在系统中存在不兼容的接口,可以通过引入一个适配器来使得原本因为接口不兼容而不能一起工作的两个类协同工作。

- 类适配器:

软件设计模式_第4张图片
软件设计模式_第5张图片

- 对象适配器:

软件设计模式_第6张图片
软件设计模式_第7张图片

五、模板方法模式:

定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变算法结构的情况下重新定义该算法的特定步骤。
软件设计模式_第8张图片

软件设计模式_第9张图片

六、代理模式:

软件设计模式_第10张图片

七、迭代器模式:

提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示
软件设计模式_第11张图片

软件设计模式_第12张图片

你可能感兴趣的:(设计模式,设计模式)