java设计模式

java的设计模式共有23种,分为三类
创建型,结构型,行为型
创建型有:
工厂方法,抽象工厂,单例模式, 

建造者,原型模式
结构型有:
适配器 桥接 组合 装饰 外观  

享元 代理
行为型有:
责任链 命令模式 策略模式 迭代器模式 观察者模式 中介者 状态模式

解释器 备忘录  模板 访问者
就每类模式的第一行所列设计模式总类做一些说明,其他的以后再补充

一  创建型
1 单例模式
对象的产生过程由类自身来确定,不能让随便new一个对象,
只能存在一个对象
比如说打开门只有一把一个匙,不管张三,李四还是王五都只能使用这一把钥匙才能打开门,这个时候
钥匙这个类就只能有这么一个对象。
上代码说明
2 工厂方法
对象的类型可变(1个类型的产品)而且对象的生产过程可以控制
对象的类型可变我们可以定义一个抽象接口,然后让每一个对象都去实现这个接口
对象的生产过程可以控制,首先,我们可以定义每一个对象的生产工厂去实现创造的过程,然后我们可以定义一个抽象类,作为一个抽象工厂,然后去统一这些具体的工厂。
上代码说明:
3
抽象工厂
系列产品,产品的总类非常多,控制这一系列产品的替换
假设有abc三类型产品
a类型产品有a1 a2 a3
b类型产品有b1 b2 b3
c类型产品有c1 c2 c3
我们需要做的是统一a1 a2 a3,给他们一个统一的接口a,b1 b2 b3统一接口b,c1 c2 c3统一接口c
啊、
a1 b1 c1的创建工厂f1
a2 b2 c2的创建工厂f2
a3 b3 c3的创建工厂f3
统一f1 f2 f3的抽象工厂f

上代码说明:
比较工厂方法和抽象工厂

普通工厂可以再产品的维度上进行扩展
如果要产生产品系列那么就会出现工厂泛滥

抽象工厂不能产生新的品总,比如说想要在来一个d类这样就会变得很麻烦


工厂方法
一个抽象产品类可以派生出多个具体产品类
一个抽象工厂类可以派生出多个具体工厂类
每个具体工厂只能创建一个具体产品类
抽象工厂
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类
一个抽象工厂类,可以派生出多个具体工厂类
每个具体工厂类可以创建多个具体产品类的实例
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。  
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

二 结构型
1 桥接模式使得软件系统能够轻松地沿着多个方向多个方向进行变化,而又不引入额外的复杂度

桥接模式的用意是将抽象化与实现化托耦,使得二者可以独立的变化,这句话有三个关键字

抽象化,实现化,脱耦

脱耦就是将抽象化和实现化直接的耦合解脱开,实质上就是它们之间使用组合/聚合关系而不是继承关系

将实现化的接口作为抽象化基类的属性(数据部分)使用

桥接
往子类扩展有两个维度上的扩展,在组织子类的时候会发现,这两个维度之间会有交叉,可以任意组合
慎用继承,因为继承之间有强烈的耦合关系,要求低内聚,高耦合
聚合代替继承
使用情况:
两个维度排列组合
上代码说明:
2 适配器
javaio的设计模式是适配器
举例:
inputStreamReader

三  行为型
1 命令
封装变化
最主要的功能是实现undo
将一个请求封装成为一个对象,然后为这些请求设置一个接口,你可以给这个接口赋不同的值来实现不同的请求
对请求排队或记录请求日志,以及支持可撤销的操作
具体代码如下:

2 状态

一个人的动作或一个类的动作根据内部类状态的不同而有不同的动作
将不同的状态用一个抽象状态函数封转
然后定义一个状态变量可以赋不同的状态值
对象中的方法用不同的状态变量去调用,实现不同状态下的动作。
具体代码如下:

3 策略模式
不同的对象实现方法不一样
但我们想用同样的算法实现
这时候就需要定义一个统一对象和统一方法的接口
然后不同的对象继承这个类并且重写这个接口函数
可以将对象都统一为
具体代码如下:

4 责任链

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值