设计模式案例分析
设计模式说是一种在特定场景下普适且可复用的解决方案,是一种可以用于提高代码可读性、可扩展性、可维护性和可测性的最佳实践。能迅速提高代码的可读性、健壮性、扩展性,
Java开发的六大基本原则
1.单一职责原则。
2.开放封闭原则。
3.里氏替换原则。所有引用基类(父类)的地方必须能透明地使用其子类的对象
4.接口隔离原则。 使用多个专门的接口,而不使用单一的总接口
5.依赖倒置原则。抽象不应该依赖于细节,细节应当依赖于抽象
6.迪米特原则。一个软件实体应当尽可能少地与其他实体发生相互作用
案例分析一
现在就要做一个营销,需要用户参与一个活动,然后完成一系列的任务,最后可以得到一些奖励作为回报。活动的奖励包含美团外卖、酒旅和美食等多种品类券。
设计模式(遵循六大基本原则)
(1)策略模式(用于封装算法)
策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换。策略模式通常包含以下角色:
● 抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
● 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
● 环境(Context)类:持有一个策略类的引用,最终给客户端调用。
(2)适配器模式
适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式包含以下主要角色:
● 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
● 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
● 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。
(3)单例模式( 策略上下文,用于管理策略的注册和获取)
单例模式设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
案例分析二
设计任务模型的。重点关注状态的流转变更,以及状态变更后的消息通知。
设计模式(遵循六大基本原则)
(1)状态模式(用于状态流转的控制)
状态模式 :对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。状态模式包含以下主要角色:
● 环境类(Context)角色:也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换。
● 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。
● 具体状态(Concrete State)角色:实现抽象状态所对应的行为,并且在需要的情况下进行状态切换。
(2)观察者模式(任务完成时的通知)
观察者模式:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布 - 订阅模式、模型 - 视图模式,它是对象行为型模式。观察者模式的主要角色如下。
● 抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。
● 具体主题(Concrete Subject)角色:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。
● 抽象观察者(Observer)角色:它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。
● 具体观察者(Concrete Observer)角色:实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。
案例分析三
要在任务型活动的参与方法上增加一层风险控制
(1)建造者模式
建造者模式:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。建造者模式的主要角色如下 :
● 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个零部件。
● 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
● 具体建造者 (Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
● 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
(2)装饰器模式
装饰器模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。装饰器模式主要包含以下角色:
● 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
● 具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其添加一些职责。
● 抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
● 具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任
总结
使用设计模式,代码易扩展,且不影响之前的应用;另外很多案例脱离应用场景。部分设计模式显然更适用于大型复杂的结构设计,而当其应用到简单的场景时,仿佛让代码变得更加繁琐、冗余。