设计模式.

设计模式概述

设计模式是人们在长期的软件开发中对一些经验的总结,是对某些特定问题经过实践检验的特定解决方法。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。

这23设计模式有两种分类方式。

(1)根据目的划分,即根据设计模式是用于完成何种工作来划分

创建型模式:用于描述“如何创建对象”,其主要特点是“将对象的创建与使用分离”。

结构型模式:用于描述如何将类或对象按某种布局组成更大的结构

行为型模式:用于描述类或对象之间如何相互协作,共同完成单个对象无法独立完成的任务,以及如何分配职责。

(2)根据作用范围划分,即根据设计模式主要作用于类上还是主要作用于对象上来划分,这种方式可划分模式和对象模式两种。

软件可复用问题和面向对象设计原则

众所周知,在软件开发和使用的过程中,需求是经常变化的。面对这些变化,设计不足的软件往往难以修改甚至要重新设计。大多数的软件应用是由多个类通过彼此合作才能实现完整的功能。对于组件化开发的软件来说,组件之间会存在各种依赖关系

1.单一职责原则:一个类应该有且仅有一个引起它变化的原因,一个类应该只负责一个职责

2.开闭原则:对扩展开发和对修改关闭

3.里氏替换原则:引用基类的地方必须透明地使用其子类的对象,可以用来判断继承关系是否合理

4.依赖倒置原则:依赖于约定而不依赖于具体实现,即面向接口编程

5.接口隔离原则将:尽量将庞大臃肿的接口拆分成更小、更具体的接口,让接口中只包含户感兴趣的方法

6.迪米特法原则:又称为最少知道原则,是指一个软件实体应当尽可能少地与其他实体发生相互作用

7.合成复用原则:尽量使用组件/聚合的方式,而不是继承关系达到软件复用的目的

设计模式的应用

简单工厂模式包含如下角色:

工厂(Factory):简单工厂模式的核心,负责实现创建所有实例的逻辑。工厂类提供静态方法,根据传入的参数创建所需的产品实例

抽象产品(Product):工厂创建的所有实例的父类型,是负责描述所有产品的公共接口。可以是接口或抽象类

具体产品(Concrete product):抽象产品的实现类,是工厂的创建目标,工厂所创建的实例就是某个具体产品类的实例

工厂方法模式的主要角色如下(对工厂进一步抽象):

抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能(Dao接口)。

抽象工厂(Abstract Factory):提供了创建产品的接口,声明创建方法,该方法返回值为抽象产品类型,调用者通过抽象工厂接口访问具体工厂的方法来创建产品(提供创建Dao接口实现类的实例的接口)。

具体产品(Concrete Product):实现了抽象产品所定义的接口,由具体工厂创建(Dao接口实现类)。

具体工厂(Concrete Factory):实现抽象工厂中的抽象创建方法,完成某个具体产品的创建,具体工厂和具体产品之间存在对应关系(负责创建Dao接口实现类的实例)。

工厂方法模式的主要优点如下:

客户只需要知道具体工厂的名称就可以得到所要的产品,无须知道产品的具体创建过程。

基于多态,便于对复杂逻辑进行封装管理,并且在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任务修改,满足开闭原则。

而其缺点是每增加一个产品就需要增加一个具体产品类和对应的一个具体工厂类,这增加了系统的复杂度。

代理模式

在生活中,我们经常听说房产中介、婚介、经纪人等社会角色,这些都是代理模式的实现体现。这种模式其实也是单一职责原则的体现,就好像一个人要买房,中间会涉及很多的环节,部分流程复杂而且专业。如果都由买家独自完成,也许很难做好,事情多影响本职工作不说,还不够专业很容易出现问题。这时候,房产中介就可以发挥他的作用了。通过房产中介,买家专注看房、签合同。而中介则联系房源、推进流程。这样做可以分工明确,合作共赢。这就是代理模式典型的任务场景。

代理模式包含如下角色:

抽象主题(Subject):通过接口或抽象类声明业务方法(NewsDao接口)。

真实主题(Real Subject):实现了抽象主题中的具体业务,是实施代理的目标对象,即代理对象所代表的真实对象,是最终要引用的对象(NewsDao接口的实现类)。

代理(Proxy):提供了与真实主题相同的接口,其内部含有对真实主题的引用,可以访问、控制或扩展真实主题的功能。

实现代理模式有多种方法,总体上分为静态代理和动态代理两种

静态代理由开发者针对抽象主题编写相关的代理类实现,编译之后生成代理类的class文件。静态代理在编译时就已经实现,代理关系在编译期就已经绑定,编译完成后代理类是一个实际的class文件。

动态代理是在运行时动态生成的,即编译完成后没有实际的代理类的class文件,而是在运行时动态生成代理类字节码,并加载到JVM中。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值