java设计模式
Posted javadongx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java设计模式相关的知识,希望对你有一定的参考价值。
概念
1,概念
设计模式即软件设计模式,描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。他的目的是为了提高代码的可重用性、可读性、可靠性
2,意义
提高程序员思维能力、编程能力、设计能力
使程序设计更加标准化,代码编制更加工程化、提高软件开发效率,缩短软件开发周期
使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强
3,基本要素
基本要素:模式名称、别名、动机、问题、解决方案、效果、结构、模式角色、合作关系、实现方法、实用性、已知应用、例程、模式扩展和相关模式等。
关键元素:
模式名称:可根据模式的问题、特点、解决方案、功能、效果来命名、模式名称有助于我们理解和记忆该模式、
问题:描述了该模式的应用环境,即何时使用它,解释了设计问题和问题存在的前因后果,以及必须满足的一系列先决条件
解决方案:包括设计的组成部分、它们之间的相互关系以及各自的职责和协作方式。它是提供设计问题的抽象描述和怎么用一个具有一般意义的元素组合来解决这个问题
效果:描述了模式的应用效果以及使用该模式应该权衡的问题,即模式的优缺点。主要是对时间和空间的衡量,以及该模式对系统的灵活性、扩充性、可移植性的影响。
分类
1,根据目的分类
根据模式用来完成什么工作划分:
1.1、创建型模式:用于描述怎么创建对象,主要特点是“将对象的创建和使用分离”,提供:单例、原型、工厂方法、抽象工厂、建造者等5种模式
1.2、结构型模式:用于描述如何将类和对象按照某种布局组合成更大的结构。提供:代理、适配器、桥接、装饰、外观、享元、组合等7种模式
1.3、行为型模式:描述类和对象之间如何相互协作完成单个对象都无法独立完成的任务,以及怎样分配职责。提供:模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等11种模式
2,根据作用范围划分
根据模式是用于类上还是用于对象上,分为类模式和对象模式
2.1、类模式:用于处理类与子类之间的关系,这些关系通过继承来实现,是静态的,在编译时刻就确定下来了。提供:工厂方法、类适配器、模板方法、解释器等4中模式
2.2、对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性,除上述4中模式,其他的都是对象模式。
功能描述
1,单例模式(Singleton):某个类只能生成一个实例,该类提供了一个全局访问点供外部获取它的实例。
2,原型(Prototype):将一个对象作为原型,通过对其复制而克隆出多个和原型类似的新实例。
3,工厂方法模式(Factory Method):定义一个用于创建产品的接口,由子类决定生产什么产品。
4,抽象工厂方法模式(Abstract Factory):提供一个用于创建产品族的接口,其每个子类可以生产一系列相关的产品
5,建造者模式(Builer):将一个复杂的对象拆解成相对简单的部分,然后根据不同需要分别创建他们,最后再组合成该复杂对象。
6,代理模式(Proxy):为某对象提供一种代理以控制对该对象的访问。即客户端通过代理访问该对象,从而限制、增强、修改该对象的一些特性
7,适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类一起工作。
8,桥接模式(Bridge):将抽象与实现分离,使他们可以独立变化。它是用组合关系来代替集成关系来实现,从而降低了抽象和实现这两个可变维度的耦合
9,装饰模式(Decorator):动态的给对象增加一些职责
10,外观模式(Facade):为多个复杂的子系统提供一个统一的接口,使这些子系统更容易被访问。
11,享元模式(FlyWeight):运用共享模式来有效的支持大量细粒度对象的访问。
12,组合模式(Composite):将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。
13,模板方法(TemplateMethod):定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下,重定义该算法的某些特定步骤
14,策略模式(Stratege):定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的改变不会影响使用算法的用户。
15,命令模式(Command):将请求封装为一个对象,使发送请求的职责和执行请求的职责分开。
16,职责链(Chain of Responsibility):把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。
17,状态模式(State),
以上是关于java设计模式的主要内容,如果未能解决你的问题,请参考以下文章