java设计模式学习

创建模式

 

一、工厂(Factory)模式

 

工厂模式的几种形态:
1、简单工厂模式,又叫做静态工厂方法(Static Factory Method)模式。
2、工厂方法模式,又称为多态性工厂(Polymorphic Factory)模式。
3、抽象工厂模式,又称工具(Kit或ToolKit)模式。

 

举例:一个项目有这样的功能,就是多格式文件处理,并获取一定信息,由于各种格式的文件的格式不同,所以读取方式不同,就要对应的类进行读取。我是这样处理的,根据传进来的文件名,判断其文件的后缀,然后在工厂类中获取一个对应的读取类的实例。

 

二、单例(Singleton)模式

 

单例就是在整个系统中,只有一个实例。更确切的讲,应该是让jvm一旦为某对象创建了一个引用,就不会在创建的一种模式。

 

注意单例的陷井:多个虚拟机和多个类加载器!在构建b/s架构的应用时,要小心使用,因为创建一个单例是在web服务器的容器共享的,任何用户都可以用。

 

举例:针对数据库连接的单例类。

 

三、建造(Builder)模式

 

如果要创建的对象是复杂的,而且组成对象创建工程的一系列步骤可以按不同的方式来生成不同的对象,这时就应该要考虑使用构造模式,否则你把构造的所有的过程都放在一个对象里面,代码可能会变得很臃肿。如果构造的对象相对简单、各不同对象相对明确,可以考虑用工厂模式。

 

举例:根据用户的选择变化,建造不同的操作界面。

 

四、原型(Prototype)模型

 

原型模式简单的讲就是,克隆并复用原型对象模式。当客户需要创建对象集时,对象大部分(复杂)内容是相似的,并且创建此类对象将花费很多的时间,所 涉及的处理也较多。比如,通过复制具有类似结构代码,并进行修改,来创建一个新的实例,这时可以考虑采用原型模式,这样就不必通过复制修改代码来实现新的 实例,只要克隆一下另一个实例,通过修改相应的属性的值来到达你的目的。

 

原型模式分为两种克隆方式:浅克隆,即改变本类属性不改变引用类信息;深克隆,即全部改变。

 

举例:类似授权模块的处理,管理员组,权限都相同,管理员个人系统不同,那么就可以采用浅克隆的方式,权限类不变,仅是相关属性发生变化。还有帐户模块的处理等。

 


结构模式

 

一、适配器(Adapter)模式

 

把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。其用意是在保留原有类的前提下 (即不改变原来的代码)把一个类的接口转换另一个接口,这样可以让具有不同接口的(原本接口不匹配的)多个类可以一起工作。而如果没有这样的转换,将不能 使用到新的类提供的服务。
适配器可分为类适配器和对象适配器。

 

举例:根据map和set的特性,增加新适配器类,具有迭代功能。

 

二、合成(Composite)模式

 

合成模式可以使用户对象以同样的方式对待单独的对象或复合的对象,合成模式要设计一个公共接口,即可提供给单独的对象使用,也可以供给复合对象使用。使用户类使用单独的对象或者复合的对象,不必关心要如何处理复合对象,只需向复合对象添加单独对象即可。

 

举例:计算磁盘空间,可能仅有单个文件,也可能有文件夹和文件。

 

三、亨元(Flyweight)模式


享元模式是实现对象的共享,减少重复数据的存储,从而减少内存分配的开销。如果要创建同个对象的n个实例,而通常这n个实例中的m个属性是相同的,那么就 会有n*m个相同的数据占据了不同的内存空间,如果n*m的值较大的话,就可以考虑flyweight享元模式了。享元模式就把这m个相同的属性提取出 来,结合单例模式和工厂模式,来实现相同属性值的实例分配到同一块内存空间(占用1*m个内存空间)。这m个属性通常叫内在信息,而其他会动态变化的信息 叫外部信息。

 

举例:公司各部门的名片样本。

 


行为模式

 

一、模板方法(Template Method)模式

 

准备一个抽象类,将部分逻辑以具体方法实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

 

利用该模式可以实现提高代码的复用率,它把各子类相同的方法放在抽象类,避免了编写重复的代码,而其他可变的方法强制型地在各子类各自实现,实现代码规范性。

 

例如struts的Action,要求实现execute方法。原因是在Action内部定义了一个实现其功能的代码架构,用户不必做其他的事情,只要在继承并实现execute方法即可。

 

二、策略(Strategy)模式

 

策略模式是对算法的封装,把使用算法的使用者和算法本身分割开,分派给不同的对象管理。一系列的算法封装到一系列的策略类里面,作为一个抽象策略类 的子类或接口的实现类。使用策略模式也可以提高代码复用率,并且使用者不必涉及到任何的算法代码,只涉及到算法的输入输出值。当要添加算法时,只要写一个 封装该算法的类并向使用者注册即可。

 

举例:商品折扣,根据不同的用户需求,选择不同的折扣策略。

 

三、状态(State)模式

 

状态模式在结构上跟策略模式没什么区别,只是它们的应用则重点不同。一个对象的行为依赖以一些状态的变化而随之变化。采用state状态模式就是把各个不同状态的所以执行的代码分别放到不同的类中。

 

举例:qq状态,根据不同的qq状态,选择不同状态需要做的事情(类)。

 

四、迭代(Iterator)模式

 

迭代模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。利用迭代模式来读取一系列按一定规则来存储的数据,而你不必理会封装的数据存储的结构是怎么样的。

 

举例:set和list都可以通过Iterator来读取数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值