设计模式的概念

来源:互联网 发布:java empty string 编辑:程序博客网 时间:2024/04/29 00:35

1. 什么是设计模式?

    设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

 

2. 框架:

    框架通常定义了应用体系的整体结构、类和对象的关系等设计参数,以便于具体应用实现者能集中精力于应用本身的特定细节。框架主要记录软件应用中共同的设计决策,框架强调设计服用,因此框架设计中必然要使用设计模式。

 

3. 模式的四个基本要素:

    模式名称(pattern name)  问题(problem)  解决方案(solution)  效果(consequence)

 

4. 设计模式的四种作用:

    外观(Facade):为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用;

    装饰(Decorate):当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能;

    单件(Singleton):保证一个类仅有一个实例,并提供一个访问他的全局访问点;

    模板方法(Template Method):在方法中定义算法的框架,而将算法中的一些操作步骤延迟到子类中实现。

 

5. 具体模式分类讨论:

 

A. 创建模式 -- 工厂模式:工厂模式专门负责将大量有共同接口的类实例化。

    工厂模式几种形态:简单工厂(Simple Factory)、 工厂方法(Factory Method)、 抽象工厂(Abstract Factory)模式。

    简单工厂模式:根据提供给它的数据返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。

    角色与结构:

                         

    优点:工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品。简单工厂模式通过这种做法实现了对责任的分割。

    缺点:当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。

 

B. 创建模式  -- 工厂模式:  

 

 

C. 创建模式  -- 抽象工厂模式:抽象工厂是一种创建型模式,是为了解决实例化时所带来的问题。

    概述:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如果绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是抽象工厂模式。

    逻辑模型:

                              

 

    物理模型:

                     

    工厂模式的缘起:1、变化点在“对象创建”,因此就封装“对象创建”; 2、面向接口编程。

    简单工厂问题:

       1、不能应对“不同系列对象”的变化。如:我们要在上面的代码中加上其他的对象就不能很好的应对了

       2、使用面向对象国内的技术来封装变化点

    动机:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。面对这种问题,我们想绕过常规的对象创建方法,提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。

    意图:提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定他们的具体类。

    Abstract Factory模式的几个要点:

       1、如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式。

       2、“系列对象”指的是这项对象之间有相互依赖、或作用的关系。
       3、Abstract Factory模式主要在于应对“新系列”的需求变动。缺点是难以应对“新对象”的需求变动。这一点应该注意,就像前面说的,如果我们现在要在加入其他系列的类,代码的改动会很大。

       4、Abstract Factory模式经常和Factory Method模式共同组合来应对“对象创建”的需求变化。

 

 



 

 

 

 

 

原创粉丝点击