浅谈设计模式之简单工厂模式与策略模式
2016-09-01 01:28
330 查看
本文主要是关于面向对象编程(OOP)的设计模式,了解优秀软件设计的演变过程比学习优秀的设计本身更有价值,因为设计演变的过程蕴藏着巨大的智慧,是一代一代程序员的思想的结晶。通过学习设计模式,设计出易于维护、扩展、复用以及灵活性好的程序;使用多态、继承、封装提高程序的聚合度,降低耦合性。
1. 简单工厂模式(Simple Factory Pattern)
又叫静态工厂模式(Static FactoryMethod
Pattern),是指通过专门定义一个单独的类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,这就是工厂。
若要继续往在业务逻辑中增加新的功能,只需在工厂内部增加相应的分支,在外部编写子类的实现。
2.简单工厂模式的UML类图
类图一般分为三层,第一层表示类名,如果是抽象类,则以斜体表示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。注意前面的”+”表示public,”-“表示private,”#”表示protected。
当类图顶端有一个<>显示时,表示这是一个接口图。第一行表示接口名,第二行表示接口里面的方法。
接下来讨论类与类,类与接口之间的关系:
继承用空心三角形+实线表示;
实现接口用空心三角形+虚线表示;
关联用实箭头表示;
聚合用空心的菱形+实线箭头表示,聚合表示的是一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。
合成用实心的菱形+实线箭头表示,是一种强的拥有关系,体现了严格的部分与整体的关系,部分与整体的生命周期一样。
依赖关系是虚线箭头表示。
3.策略模式(Strategy Pattern)
面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。而策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。
用工厂来生成算法对象,把变化点封装起来,即在具体的策略类中封装具体的算法或者行为,并且让其继承与Strategy类,而在策略类Strategy中定义所有支持算法的公共接口。
4.策略模式解析
通过以上的分析,我们可知策略模式是一种定义了一系列算法的方法,所有的方法完成相同的工作,只是具体的实现有所不同而已,它可以以相同的方式调用所有的算法减少了各种算法与算法实用类之间的耦合。
显而易见,策略模式的Strategy类层次为Context定义了一系列可供重用的算法或者行为,继承有助于解析这些算法的公共功能;同时,简化了单元的测试,通过各自的接口即可单独测试。
策略模式就是用来封装算法的,在实际使用中可用它来封装几乎所有类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,即可考虑策略模式来处理。但是在基本的策略模式中,选择实现的职责由客户端对象处理,并转给策略模式的Context对象。
1. 简单工厂模式(Simple Factory Pattern)
又叫静态工厂模式(Static FactoryMethod
Pattern),是指通过专门定义一个单独的类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,这就是工厂。
若要继续往在业务逻辑中增加新的功能,只需在工厂内部增加相应的分支,在外部编写子类的实现。
2.简单工厂模式的UML类图
类图一般分为三层,第一层表示类名,如果是抽象类,则以斜体表示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。注意前面的”+”表示public,”-“表示private,”#”表示protected。
当类图顶端有一个<>显示时,表示这是一个接口图。第一行表示接口名,第二行表示接口里面的方法。
接下来讨论类与类,类与接口之间的关系:
继承用空心三角形+实线表示;
实现接口用空心三角形+虚线表示;
关联用实箭头表示;
聚合用空心的菱形+实线箭头表示,聚合表示的是一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。
合成用实心的菱形+实线箭头表示,是一种强的拥有关系,体现了严格的部分与整体的关系,部分与整体的生命周期一样。
依赖关系是虚线箭头表示。
3.策略模式(Strategy Pattern)
面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。而策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。
用工厂来生成算法对象,把变化点封装起来,即在具体的策略类中封装具体的算法或者行为,并且让其继承与Strategy类,而在策略类Strategy中定义所有支持算法的公共接口。
4.策略模式解析
通过以上的分析,我们可知策略模式是一种定义了一系列算法的方法,所有的方法完成相同的工作,只是具体的实现有所不同而已,它可以以相同的方式调用所有的算法减少了各种算法与算法实用类之间的耦合。
显而易见,策略模式的Strategy类层次为Context定义了一系列可供重用的算法或者行为,继承有助于解析这些算法的公共功能;同时,简化了单元的测试,通过各自的接口即可单独测试。
策略模式就是用来封装算法的,在实际使用中可用它来封装几乎所有类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,即可考虑策略模式来处理。但是在基本的策略模式中,选择实现的职责由客户端对象处理,并转给策略模式的Context对象。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- 设计模式---状态模式在web前端中的应用
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用