Java设计模式

JAVA 设计模式 --代码设计总结
优点:广泛使用;可被重复利用,保证可靠,软件工程的基石
设计模式分类
1.创建模式: 工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式
2.行为模式:策略模式,模板方法模式,观察者模式,责任链模式,命令模式,迭代子模式,备忘录模式,状态模式,命令模式,访问者模式,中介者模式,解释模式
3.结构模式:适配器模式,装饰者模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
4。特例:并发型模式,线程池模式


一.工厂模式 总厂
1.普通工厂模式:通过new 工厂类 对(实现统一接口)的一些类进行实例关 如果传递字符出错,则不能创建对象
2.多个工厂模式: 普通工厂的改进 -提供了多个工厂方法,分别创建对象
3.静态工厂方法模式: 将多个工厂模式中的方法置为静态,不需要创建实例,直接调用

工厂模式总结;
缺点:类的穿件依赖工厂,扩展时,需要修改工厂类--违背了闭包 的原则
生产中:需要实现具有多个公共接口的产品类时,使用工行模式。
普通工厂模式:参数必须传 right ,否则 不能实例化指定的产品类
生产中,多用 静态工厂模式 代替 多个工厂模式

二。抽象工厂模式 分厂(代工厂)
实现:创建多个工厂类,增加功能 --创建new factory,不该改之前的代码
实现 增加功能,实现一个接口 sender接口


三。单例模式---待学习--
实现:在jvm中 ,该对象只有一个实例存在。
优点: 节省大型类的开销; 省去new 操作符,减轻GC压力;保证核心交易服务,独立东芝整个流程


四。装饰者模式
实现:给一个对对象,动态增加一些功能(装饰对象 +被装饰对象实现同一个接口, 装饰对象 持有 被装饰对象的实例
应用:
1.生产中,需要扩展特定类的功能时 使用装饰者模式
2.动态的为一个对象增加功能+动态撤销(继承不能动态测撤销,继承功能是静态的不能动态增删);
缺点:生产时,相似对象,不易排错

五。代理模式
实现:添加一个代理类,替换原对象进行操作(eg:人在某方面不正常,找有丰富资源与技能的人帮助完成工作)
应用: 现有方法使用时 ,需要对原有方法进行改进 (两种方法)
1.对原有方法进行改进-适应。 违反:对扩展开发,对修改关闭 原则
2.使用代理模式,调用原有的方法,对产生的结果进行控制
优点:使用代理模式,使功能划分更清晰


六。外观模式
外观模式目的 解决类与类之家的依赖关系的,有效的实现类与类之间的合理调度(将特定功能的类,封装到与执行类中)
像spring一样,可以将类和类之间的关系配置到配置文件中,
而外观模式就是将他们的关系放在一个Facade类中,根据程序需要惊醒调度
优点:降低了类类之间的耦合度,该模式中没有涉及到接口,看下类

七。组合模式
思想:整体模式在处理类似树模式的时候比较方便
使用场景:将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,

八。建造者模式
实现:将各种产品集中起来进行管理,用来创建符合对象--将多功能集成到一个类中
工厂模式关注:创建单个商品 ;
建造者模式关注:创建符合对象,多个部分(集中创建符合条件的多个对象)

九。原型模式(多态)---待学习---
实现:将一个对象作为原型,对其进行复制,克隆,产生一个与原型对象类似的新对象。
复制对象是通过clone()实现
浅复制:复制一个对象后,根据基本数据类型的变量 重新创建, 但是不同类型引指向原对象所指的 原对象

深复制:复制一个对象后,根据基本数据类型的变量 +引用数据类型变量,都是重新创建对象 -深复制是完全复制

十。适配器模式
思想:将某个接口转换成--客户希望的接口表示--目的:消除接口之间的不匹配
分类:类适配器,对象适配器,接口适配器模式
类适配器: 将类中的特定方法,通过adapter extends 该类并 扩展到Targetable接口中 --通过适配器 添加 外部类中已实现的方法
使用条件:将一个类转换成 满足一个新接口类时 ;方法:创见一个新类,继承原有类,实现新的接口

对象适配器:将类中的特定方法,通过adapter not extends ,但持有该类的实例,扩展到Targetable接口中
使用条件:将一个对象转化成满足一个新接口类的对象是 方法:创建一个wrapper类,引入原有实例,在wrapper类方法中,调用实例方法

接口适配器:目的:自定义实现接口中的抽象发方法,不是全部实现;实现:通过抽象类实现接口(该类中实现接口中的全部方法),从而不直接与原始接口打交道 ;只用抽象类与接口进行联系
使用条件:当不希望实现接口中全部方法时 创建一个抽象类wrapper,实现所有方法,当别的类需要该类方法是,继承该抽象类即可

接口 ---be implemented AbstarctimplClass(空实现) +其他类继承 AbstarctimplClass--动态的选择重写其中的方法----》通过接口实例化类中的方法


十一。桥接模式
实现:将食物与具体实现分开,让他们独立的变化;目的:将抽象与实实实例解耦
使用场景:jdbc 进行数据库操作时,jdbc 可以在不同的数据库之间进行切换; 由于jdbc 提供统一接口,每个数据库提供个各自独立的实现 (通过数据库驱动进行桥接)

十二。策略模式
使用场景:定义封装了多个算法,它们之间可以相互替换,算法变化不会影响使用算法的用户
实现;设计一个接口 目的:一些实现提供 统计的接口 ,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类)
优点:系统本身不决定算法实现,在使用根据需求调用指定算法

十三。迭代子模式
思想;顺序的访问剧集聚集中的对象,在集合中使用非常常见;
1.需要遍历集合对象,即聚集对象;
2.迭代器对象:用户对聚集对象机记性遍历访问
MyCollection中定义集合的一些操作
MyIterator 定义一些迭代操作,且持有Collection 实例

十四。状态模式
思想:当对象状态改变时,改变其行为 + 监听者可以看到

十五。命令模式
司令---命令--士兵 司令布不关注实现+只关注结果 士兵关注命令

十六。访问者模式
使用于数据接口相对稳定的算法又易变的算法:使得算法增加变得容易
缺点:数据结构不易改变,访问者相关的行为集中到一个访问者
注意: 下面情况使用访问者模式
1.新功能会不会与现有功能出现兼容问题?
2.以后会不会在需要添加
3.如何类不容许修改代码怎么办

十七。中介者模式
类之间有依赖,不利于类的扩展与维护;修改一个对象,其它关联的对象都得进行修改
使用中介者模式:只需要关心和mediator类的关系,具体类之间的关系+调度给mediator修行。
中介者,完成类之间的调度;

十八。备忘录模式
思想:通过备忘录实现类值的修改与恢复
即:保存以对象状态,适当时恢复状态
A=B 用c存B 当A改变后 ,适当时间 通过c恢复A的值


十九。模板方法模式
实现:定义一个抽象类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用


二十。享元模式
目的:实现对象的共享即共享池,当系统中对象多大时候,可以减少内存的开销;常与工厂模式连用
应用:数据库连接池

二十一。观察者模式
思想:当一个对象发生变化时,其他依赖的对象,都会发生变化,并且随着变化,对象之间是一对一关系

二十二。责任链模式
思想:有多个对象,多个对象持有对下一个对象的引用 become 责任链模式
请求在责任脸上传递,直到某一对象决定处理该请求。但发出者并不知道那个对象处理的结果
隐瞒客户端:对系统进行攻台调用
命令只允许从一个对象传递到另一个对象



心得:抽象类中的方法不必全部实现,但接口中的方法必须全部实现

二十三。解释其模式
用于oop开发中的编译器开发,应用面比较少


装饰模式代理模式区别
共性:实现基础对象实现的接口, 在其自身对象中保存着被(代理/装饰)对象引用

装饰模式:动态的将 责任功能附加的 被装饰对象上(扩展对象功能) 灵活性好于继承
代理模式:通过其他对象进行代理,用来控制对 被代理对象的访问(主要用于事务控制)

装饰功能:主要用于 责任功能的扩展
代理模式:主要用于 控制访问

区别:
代理模式 :代理类可以对客户端隐藏 ( 一个具体对象信息)

使用代理模式, 常在代理类中创建一个对象实例。
使用装饰模式,将袁石磊作为一个参数传递给装饰者的构造器
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值