Java设计模式——针对可复用性的设计模式(6种)

写在前面:阅读设计模式的时候或许会觉得许多设计模式都不过是多此一举,但如果站在自己是类库开发者为用户服务的角度想问题,将自己想象成用户,将自己置身于多人程序开发的场景,就能理解设计模式的好处了。

1.结构化模式
(1)适配器模式(Adapter)

目的:解决类之间接口不兼容的问题。即原类基本可以满足新的要求,却因函数名、参数列表、返回值等差异无法直接作为目标接口的实现。
方法:在原类基础上创建Adapter类以适应新的功能。
构造方式:

	|用户| <—— |<Interface> Target|   |原类|
						| 实现			| 继承或委托
						————|Adapter|————

其他:emmm,有一个原类,新建一个接口,想实现时借用原方法也就算Adapter了啊~接口的好处是可以将多种实现归属为一类对象。

(2)装饰器模式(Decorator)

目的:需要对某个基础概念进行任意/动态地组合为复合概念。
方法:将复合概念的组件分解,通过Decorator抽象类的各种嵌套构建完成添加动作。
构造方式:

|<Interface> Pizza|————————————
		| 实现					| 继承
|ConcretePizza| |<Abstract> Decorator|Pizza pizza|construct(pizza) add()|
							|
				  |TopA|——————————|TopB|

其他:毕竟这是为了复用的设计模式嘛,要是单纯只用一个方法来分别设置就能完成的场合,就不需要一定用类嵌套构建的方式完成了。

(3)窗口模式(Facade)

目的:调用者需要简化的接口来调用复杂系统的整体功能。
方法:提高接口的层次,隐藏各种内部关系与原子操作,只将组合好的调用序列用Facade包装起来交给用户调用。
构造方式:

|用户|——>|Facade|
			|
|@$%^#|-|^&*^&|-|%%$&^|

其他:这个设计模式,相信大家平时编程的时候即便没有注意也确实在使用,比如将控制台的输入转化为GUI中的按钮,这过程就必然经过了”Facade“,高级语言实际上是将更底层,更复杂的设计关系模块化供使用者调用。

2.行为化模式
(1)策略模式(Strategy)

目的:调用者希望在编程时动态选择某一问题的解决算法。
方法:将算法部分用类包装起来,用Strategy接口将所有算法的具体实现归为一类,使用时动态传入策略以决定使用何种实现。
构造方式:

	|Context|func(Strategty strategy)| <—— |<Interface> Strategty|
													  |
				  					  |StrategtyA|——————————|StrategtyB|

其他:面向可复用性的设计模式的关键之处就在于利用接口归类上,如此便可用创建不同类的方式节约switch链等写死在程序中的代码,增加复用性,便于扩展。

(2)模板模式(Template)

目的:不同的模块具有相同的处理步骤,但不同类的实现不同。调用者以统一的格式调用,编程者显示地声明这种关系。
方法:用统一的Template抽象类作为模板(传入不同Strategy),或用具体子类完成多种实现。
构造方式:

|用户|——>|<Abstract> Template|
				    |
     |TemplateA|——————————|TemplateB|

其他:唔姆,应该也可以用Strategy完成不同的实现吧~

(3)迭代器模式(Iterator)

目的:调用者需要以统一的,类型无关的方式访问容器中的所有元素。
方法:定义Iterator接口规定迭代器的基本操作并实现。
构造方式:

|<Iterable> Aggregate|<——|用户|——>|     <Interface> Iterator      |
|   getIterator()    |			  |next() hasNext() currentItem() |
	   	   |						   			   | 
 |ConcreteAggregate|<————————————————————>|ConcreteIterator|

其他:注意,Iterator可直接获得Iterable的属性,不要再传进Iterator了_(: 3 ∠_)_

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值