装饰器模式&模板方法设计模式&适配器模式&策略模式&观察者模式

360 阅读3分钟

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

装饰器模式

判断两个类之间能不能有继承关系,主要看这两个类之间有没有"is a"关系。并且还有符合里斯替换原则

尽管调料不是饮料,但是为了制作出装饰器模式,我们也只能让调料去继承饮料。

装饰器,一边继承一边关联

优点:加入新饮料,或者新调料都不会违反开闭原则

缺点:类的数量还是多

流用的就是装饰器模式

InputStream in]=new FileInputStream

BufferenInputSteam bis=new BufferedInputStream

alt +shift+ z +3

模板方法设计模式

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

缺点: 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。

注意事项: 为防止恶意操作,一般模板方法都加上 final 关键词。

适配器模式

定义:一个类的接口转化成客户希望的另一个接口。适配器模式使得接口不兼容的类可以一起工作。

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

策略模式

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法

找出应用中可能需要变化之处,把他们独立出来,不要和那谢谢不需要变化的代码混在一起。

在jdk1.8中接口有默认的实现方法。

观察者模式

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。

在抽象类里有一个 ArrayList 存放观察者们

private List<Observer> observers = new ArrayList<>();

redis发布订阅

activeMQ

业务场景:

游戏中的一个角色,hp mp,在游戏窗口中展示角色的hp mp

一个对象对的属性变了要把它展现在不同地方

当hp发生变化的时候,要通知三个地方,1.血条 2.球,3.面板

观察者模式用的是推模式

优点

1.添加一个新的面板要显示新数据没有违反开闭原则

2.每个面板的算法,都被隔离在不同的类中了,符合单一职责。

接口中出现具体类名,违反依赖倒置

抽象依赖于具体,违反依赖倒置

javabeen 不违反,因为穿梭于各个层,不会导致耦合的情况

观察者中拥有主体,主体中有所有的观察者,双向引用。

接口之间要解耦,具体类之间可以耦合

1.主体中有集合