java设计模式-- 观察者模式 , 外观模式, 模板方法模式

观察者模式:
观察者模式比较容易理解:
比如天龙八部里面的王语嫣,每次慕容复打架的时候,每当别人将要使出什么绝招时,会提醒慕容复注意提防.
项目中用到的地方就是注册中中心,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();

    }
}

其他的模式暂时先停一下吧,我迷茫了,
各种模式都是惊人的相似,比如代理模式和外观模式,装饰器模式:
代理模式,代理的地方加点前置算法,再加点后置算法,它是外观模式呢?还是装饰器模式呢?
缓缓吧!等有一天真的明白了,再继续

你可能感兴趣的:(java)