设计模式

设计模式

设计模式之策略模式

策略模式定义了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 来解析这个定义,“算法簇”&“相互替换”代表了是一组相同目的算法,肯定是利用多态能力实现。脑海中,下述的类图就出来了。 “变化独立于使用算法的客户”,这句话的意思是,使用这些算法的客户端代码不需要因为算法的变化而修改自身,什么意思,如何能做到改变算法而不修改自身,那就是客户端代码只依赖于算法的抽象(接口),而不是具体的实现。 通过类图,可以清晰的看到两者的区别。 学习设计模式,一个关键的自我校验,是能够自己给自己出题,构建场景,并通过目标设计模式来解决。 💡以支付场景来举例,具体的支付方式有支付宝和微信,需要支持用户在实际付款时动态切换。 1. 定义算法接口:定义一个 PaymentStrategy 接口,表示支付方式的抽象。 public interface PaymentStrategy { void pay(int amount); } 2. 实现具体算法:AlipayStrategy 和 WechatPayStrategy 分别实现 Payment

By 李浩

设计模式

设计模式开篇

首先应该对要讨论的设计模式主题进行约束,是面向对象编程的设计模式,针对于非面向对象编程,如函数式编程、过程式编程,也有相应的设计模式。 明确了是面向对象编程,那么所有的设计套路都是基于面向对象编程的特性,封装、抽象、继承、多态四大特性就是设计模式的基础,各种模式都是利用了这些基础能力来巧妙设计的,如果没有编程语言自身的能力支持,就谈不上设计模式了。 因此,这四大特性应该真正做到理解,而非死记硬背,理解之后,后续讲到每一种设计思路时,才会有清晰的脉络,模式不是被突发的设计出来的,而是经过经验演进而来。 封装,将同一类的属性、方法统一装在一个类中,强调聚类效果。 抽象,在具体类别上再设计一层,能够更高的抽象,定义通用的接口或抽象类,隐藏具体的实现细节,提供更通用的视图。 继承,通过类的层次化结构实现代码复用,子类可以扩展或修改父类的行为,减少代码重复。 多态,通过父类的接口调用子类的具体实现,使得代码能够以一种通用的方式处理不同的对象,提高代码的通用性和灵活性。 这些特性共同构成了面向对象编程的核心,是设计模式的基石。 上图中,可以看到是整个设计模式的一个最小结构,其他的模式都是

By 李浩