设计模式自学笔记004_Real(观察者设计模式、外观设计模式)

设计模式自学笔记003_Real(观察者设计模式、外观设计模式)

一、观察者设计模式

在程序设计中,有的时候,我们的一个类(class1)的内容发生了改变,我们需要让其他的类根据class1的改变而做成相应的动作,那么就会用到观察者模式。我们需要有一个观察者类(Watcher1)来观察,如果头变动就去通知其他的类,让其他的类做出相应的改变。

举个例子:假设现在电脑分配给了我们一个或几个端口,然后一旦某一个端口有数据进入,那么我们就去通知与端口对应的程序进行某些操作,比如电脑分配给我们8888端口,负责8888端口的程序是QQ,那么我们设置一个观察者类扶额监听这个端口,一旦有人给我们发QQ消息,那么观察者类就会监听到,然后通知QQ程序,QQ就会响起QQ消息的音效。那么我们可以把代码实现一下。(代码实现了多个接口的监听)

//负责观察的接口类
public interface Monitor {
    //监听端口的方法
    void monitorPort(Applications app);
    //通知APP的方法
    void notifyApp();
}
import java.util.ArrayList;

public class Observer1 implements Monitor{
    private ArrayList<Applications> AppArray = new ArrayList<>();
    private Integer state = 0; //1表示来消息了

    @Override
    public void monitorPort(Applications app) {
        AppArray.add(app);
    }

    @Override
    public void notifyApp() {
        AppArray.forEach(app -> app.Feedback());
    }
}
//应用程序的接口类
public interface Applications {
    void Feedback();
}
public class QQ implements Applications{
    @Override
    public void Feedback() {
        System.out.println("嘀嘀嘀,QQ消息来了");
    }
}
public class WeChat implements Applications{
    @Override
    public void Feedback() {
        System.out.println("嘀嘀,微信消息来了");
    }
}
//main方法的验证
public class ObserverDesign001 {
    public static void main(String[] args) {
        Monitor observer = new Observer1();
        observer.monitorPort(new QQ());
        observer.monitorPort(new WeChat());
        observer.notifyApp();
    }
}

二、外观设计模式

在程序设计中,有的时候我们需要一个对象腰用另一个系统里面的多个方法,而且有的时候可能需要按照一定的顺序进行调用,那么如果我们呢每次要用这个系统里面的方法每次都要将方法都调用一遍,非常的麻烦,那么外观设计模式就是先定义一个门面类(facade),让门面类创建系统的实例化对象,并创建方法来调用系统里面的多个方法,这样,我们在需要使用这个信息系统里面的方法的时候,我们只需要通过门面类来调用方法即可,这样就将系统与外界分隔开,外界不需要了解系统内部的结构,只需要通过门面类来实现自己想要的方法即可。

那么我们来举一个例子:假设我们现在有一个类class1,里面有一个方法fun1(),我们在使用fun1()时候需要调用类class2里面的fun2()方法、class3里面的fun3()方法、class4里面的fun4()方法。代码如下:

public class FacadeDesign1 {
    public static void main(String[] args) {
        Class1 class1 = new Class1(new Class2(), new Class3(), new Class4());
        class1.fun1();
    }
}

class Class1{
    private Class2 class2;
    private Class3 class3;
    private Class4 class4;

    public Class1(Class2 class2, Class3 class3, Class4 class4) {
        this.class2 = class2;
        this.class3 = class3;
        this.class4 = class4;
    }

    public void fun1(){
        System.out.println("调用了方法一");
        class2.fun2();
        class3.fun3();
        class4.fun4();
    }
}

class Class2{
    public void fun2(){
        System.out.println("调用了方法二");
    }
}

class Class3{
    public void fun3(){
        System.out.println("调用了方法三");
    }
}

class Class4{
    public void fun4(){
        System.out.println("调用了方法四");
    }
}

应用:
1、对分层结构系统构建时,使用外观设计模式Dion工艺子系统中每层的入口可以简化系统之间的依赖关系。
2、当一个复杂系统的子系统很多的时候,外观设计模式可以为系统设计一个简单的接口供外界访问。
3、当客户端与子系统之间存在很大的联系的时候,引入外观设计模式可以将他们进行分离,从而提高子系统的独立性与可移植性。

优点:
1、降低子系统与客户端之间的耦合度,子系统的变化不会影响到其他的使用它的客户类。
2、对于客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。
3、降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响外观对象。

缺点:
1、不能很好的限制客户使用子系统类,很容易带来未知风险。
2、增加新的子系统需要修改外观类客户端的源代码,违背了“开闭原则”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仲子_real

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值