[关闭]
@Alpacadh 2022-09-18T18:26:35.000000Z 字数 2399 阅读 246

Part.6 行为型设计模式

设计模式


1、观察者模式

实际上,设计模式要干的事情就是解耦。创建型模式是将创建和使用代码解耦,结构型模式是将不同功能代码解耦,行为型模式是将不同的行为代码解耦,具体到观察者模式,它是将观察者和被观察者代码解耦。

1.1 原理

1.2 实现

public interface Subject {

void registerObserver(Observer observer);

void removeObserver(Observer observer);

void notifyObservers(Message message);

}

public interface Observer {

void update(Message message);

}

public class ConcreteSubject implements Subject {

private List observers = new ArrayList();

@Override

public void registerObserver(Observer observer) {

  observers.add(observer);

}

@Override

public void removeObserver(Observer observer) {

  observers.remove(observer);

}

@Override

public void notifyObservers(Message message) {

  for (Observer observer : observers) {

    observer.update(message);

  }

}

}

public class ConcreteObserverOne implements Observer {

@Override

public void update(Message message) {

  //TODO: 获取消息通知,执行自己的逻辑...

  System.out.println("ConcreteObserverOne is notified.");

}

}

public class ConcreteObserverTwo implements Observer {

@Override

public void update(Message message) {

  //TODO: 获取消息通知,执行自己的逻辑...

  System.out.println("ConcreteObserverTwo is notified.");

}

}

public class Demo {

public static void main(String[] args) {

  ConcreteSubject subject = new ConcreteSubject();

  subject.registerObserver(new ConcreteObserverOne());

  subject.registerObserver(new ConcreteObserverTwo());

  subject.notifyObservers(new Message());

}

}

2、模板模式

2.1 原理

2.2 作用

2.2.1 复用

2.2.2 扩展

2.3 实现

public abstract class AbstractClass {

public final void templateMethod() {

  //...

  method1();

  //...

  method2();

  //...

}

protected abstract void method1();

protected abstract void method2();

}

public class ConcreteClass1 extends AbstractClass {

@Override

protected void method1() {

  //...

}

@Override

protected void method2() {

  //...

}

}

public class ConcreteClass2 extends AbstractClass {

@Override

protected void method1() {

  //...

}

@Override

protected void method2() {

  //...

}

}

AbstractClass demo = ConcreteClass1();

demo.templateMethod();

3、策略模式

3.1 原理

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注