观察者模式:
观察者模式比较容易理解:
比如天龙八部里面的王语嫣,每次慕容复打架的时候,每当别人将要使出什么绝招时,会提醒慕容复注意提防.
项目中用到的地方就是注册中中心,zookeeper,当Provider上线或者下线,它会告知Consumer能不能调用,这就是观察者
在java中的体现,主要就是 观察者,和被观察的对象,然后所有的被观察者在观察者这里注册, 以便被观察的对象发生了变化,可以通知其他被观察者
参考: https://www.runoob.com/design-pattern/observer-pattern.html
外观模式:
提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。
一个接口搞定所有事情,调用者不用管里面复杂的结构逻辑(典型的面向对象),就是不过耦合性太高了,不符合开闭原则
参考: https://www.runoob.com/design-pattern/facade-pattern.html
模板方法模式:
参考:https://blog.csdn.net/xia744510124/article/details/52372340
https://www.runoob.com/design-pattern/template-pattern.html
将固定操作步骤(算法),在抽象抽象出来,这既是模板方法,可变部分,在子类中重写
比如: Spring中的JdbcTemplate
1,加载驱动
2,建立连接
3,获取数据库操作对象
4,定义sql语句
5,执行操作
6,获取结果
7,关闭(关闭结果集–> 关闭—操作对象—>关闭连接)
这就是一套模板,所不同的就是具体每一个步骤中的具体参数,
为了防止恶意的操作,一般模板方法前面会加上final关键字,不允许被覆写;
简单的实现就是:
public abstract class AbstractTemplate {
abstract void func1();
abstract void func2();
abstract void func3();
//模板方法
public final void templateFunc(){
func1();
func2();
func3();
}
}
然后每个子类继承这个抽象模板就行了,而且每个子类的行为(算法),都是一致的,
提取公共代码,但是可读性,有点差,
装饰器模式:
用装饰器类包装原有的类,在保证原有类方法完整的情况下,提供额外的功能,就像包起来一样,
被用于多个 Java IO 类中
例如:给电脑加个显示器
interface Screen {
void show();
}
//电脑
class Computer implements Screen {
@Override
public void show() {
System.out.println("电脑的显示器都可以用来看片");
}
}
//装饰器的抽象类
abstract class BigScreen implements Screen {
protected Screen screen;
public BigScreen(Screen screen) {
this.screen = screen;
}
}
//装饰器实现类
class newScreen extends BigScreen{
public newScreen(Screen screen) {
super(screen);
}
@Override
public void show() {
screen.show();
System.out.println("大屏幕看片比较爽");
}
//测试
public static void main(String[] args) {
//原来的电脑
Computer computer = new Computer();
//加了大显示器的电脑
newScreen newScreen = new newScreen(computer);
newScreen.show();
}
}
其他的模式暂时先停一下吧,我迷茫了,
各种模式都是惊人的相似,比如代理模式和外观模式,装饰器模式:
代理模式,代理的地方加点前置算法,再加点后置算法,它是外观模式呢?还是装饰器模式呢?
缓缓吧!等有一天真的明白了,再继续