1、策略模式
在某种策略接口的多种实现中选择需要的策略并执行。
package com.zy.demo.design;
/**
* 策略模式
* @author zy
*/
public class Strategy {
public static void main(String[] args){
SelectOptimizeStrategy sos = new SelectOptimizeStrategy(new TimeOptimizeStrategy());
sos.executeOptimize();
}
}
/**
* 调优策略
*/
interface OptimizeStrategy{
/**
* 调优方法
*/
void optimize();
}
/**
* 时间调优策略
*/
class TimeOptimizeStrategy implements OptimizeStrategy{
/**
* 时间调优方法
*/
@Override
public void optimize() {
System.out.println("optimize by time");
}
}
/**
* 空间调优策略
*/
class SpaceOptimizeStrategy implements OptimizeStrategy{
/**
* 空间调优方法
*/
@Override
public void optimize() {
System.out.println("optimize by space");
}
}
/**
* 选择调优策略
*/
class SelectOptimizeStrategy{
//声明调优策略
private OptimizeStrategy optimizeStrategy;
/**
* 选择指定调优策略
* @param optimizeStrategy 调优策略
*/
public SelectOptimizeStrategy(OptimizeStrategy optimizeStrategy){
this.optimizeStrategy = optimizeStrategy;
}
/**
* 执行策略
*/
public void executeOptimize(){
this.optimizeStrategy.optimize();
}
}
2、观察者模式
观察者订阅感兴趣的主题并随时接受主题推送的信息。
package com.zy.demo.design;
import java.util.ArrayList;
import java.util.List;
/**
* 观察者模式
* @author zy
*/
public class Observer {
public static void main(String[] args){
Topic topic = new Topic();
new MusicSubscriber(topic);
new MovieSubscriber(topic);
topic.notifySub("notify msg");
}
}
/**
* 主题类
*/
class Topic{
//存储订阅者列表
private List<Subscriber> subscriberList = new ArrayList<>();
/**
* 注册订阅者
* @param subscriber 订阅者
*/
public void registerSub(Subscriber subscriber){
this.subscriberList.add(subscriber);
}
/**
* 通知订阅者
*/
public void notifySub(String msg){
//循环订阅者订阅消息
for(Subscriber subscriber : this.subscriberList){
subscriber.subscribe(msg);
}
}
}
/**
* 订阅者接口
*/
interface Subscriber{
/**
* 订阅主题
* @param msg 消息
*/
void subscribe(String msg);
}
/**
* 音乐订阅者
*/
class MusicSubscriber implements Subscriber{
/**
* 在主题上注册音乐订阅者
* @param topic 主题
*/
public MusicSubscriber(Topic topic){
topic.registerSub(this);
}
/**
* 订阅
* @param msg 消息
*/
@Override
public void subscribe(String msg) {
System.out.println("subscribe music msg");
}
}
/**
* 电影订阅者
*/
class MovieSubscriber implements Subscriber{
/**
* 在主题上注册电影订阅者
* @param topic 主题
*/
public MovieSubscriber(Topic topic){
topic.registerSub(this);
}
/**
* 订阅
* @param msg 消息
*/
@Override
public void subscribe(String msg) {
System.out.println("subscribe movie msg");
}
}