目录

spring-设计模式

spring-设计模式

创建型模式

结构型模式

行为型模式

策略模式

首先,定义一个策略接口: public interface Strategy { public void draw(int radius, int x, int y); } 然后定义具体的几个策略: public class RedPen implements Strategy { @Override public void draw() { System.out.println(“red pen”); } } public class YellowPen implements Strategy { @Override public void draw() { System.out.println(“yellow pen”); } } public class BluePen implements Strategy { @Override public void draw() { System.out.println(“blue pen”); } } 使用策略的类: public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public int excuteDraw(int radius, int x, int y) { return strategy.drwa(radius, x, y); } } 客户端演示: public static void main(String[] args) { // 使用蓝笔画画 Context context = new Context(new BluePen()); context.excuteDraw(84, 62, 063); } 图示: https://i-blog.csdnimg.cn/direct/3a2c13a7d71244b0a5706580345ae702.png

观察者模式

首先,定义主题,每个主题需要持有观察者列表的引用,用于在数据变更的时候通知各个观察者: public Class Subject { private List observerList = new ArrayList<>(); private int state; public int getState() { return state; } public void setState(int state) { this.state = state; // 数据变更 通知观察者们 notifyAll(); } // 注册观察者 public void addObserver(Observer observer) { observerList.add(observer); } // 通知观察者们 public void notifyAll() { for (Observer observer : observerList) { observer.update(); } } } 定义观察者接口: public abstract class Observer { protected Subject subject; public abstract void update(); } 定义具体的2个观察者类: // 二进制观察者 public class BinaryObserver extends Observer { public BinaryObserver(Subject subject) { this.subject = subject; this.subject.addObserver(this); } // 本方法由主题类在数据变更时进行调用 @Override public void update() { System.out.println(“数据变化!对应的二进制变为:result”); } } // 十六进制观察者 public class HexaObserver extends Observer { public HexaObserver(Subject subject) { this.subject = subject; this.subject.addObserver(this); } @Override public void update() { System.out.println(“数据变化!对应的十六进制变为:result”); } } 客户端演示: public static void main(String[] args) { // 先定义一个主题 Subject subject = new Subject(); // 定义观察者 new BinaryObserver(subject); new HexaObserver(subject); // 模拟数据变更 这个时候 观察者们的uodate方法会被调用 subject.setState(8462063); }