设计模式——行为型模式(常用三种)

策略模式

定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。

class StrategyC extends Strategy {

	@Override
	void algorithmInterface() {
		System.out.println("算法C");
	}
}
// 使用上下文维护算法策略

class Context {

	Strategy strategy;

	public Context(Strategy strategy) {
		this.strategy = strategy;
	}

	public void algorithmInterface() {
		strategy.algorithmInterface();
	}
}

//感觉这像代理模式的写法
class ClientTestStrategy {
	public static void main(String[] args) {
		Context context;
		context = new Context(new StrategyA());
		context.algorithmInterface();
		context = new Context(new StrategyB());
		context.algorithmInterface();
		context = new Context(new StrategyC());
		context.algorithmInterface();
	}
}

 

模板方法模式

定义一个操作中的算法骨架,而将一些步骤延迟到子类中。

比如一个棋牌麻将:父类有打牌、过牌、碰牌、胡牌方法接口,交给子类去实现。父类实现开始游戏玩家信息初始化、结算时金币扣除和日子存储!

//模板方法
public abstract class BankTemplateMethod {

	// 1.取号排队
	public void takeNumber() {
		System.out.println("取号排队。。");
	}

	// 2.每个子类不同的业务实现,由各自子类实现.
	abstract void transact();

	// 3.评价
	public void evaluate() {
          System.out.println("反馈评价..");
	}
	
	public void process(){
		takeNumber();
		transact();
		evaluate();
	}
}

 

观察者模式

观察者模式主要用于1对N的通知。(一个望风的,班主任来了,好通知全班学生)

//观察者的接口,用来存放观察者共有方法
public interface Observer {
   // 观察者方法
	void update(Subjecct subjecct);
}

//观察对象的父类
public class Subjecct {
	//观察者的存储集合
	private List<Observer> list = new ArrayList<>();

	// 注册观察者方法
	public void registerObserver(Observer obs) {
		list.add(obs);
	}
    // 删除观察者方法
	public void removeObserver(Observer obs) {
		list.remove(obs);
		this.notifyAllObserver();
	}

	// 通知所有的观察者更新
	public void notifyAllObserver() {
		for (Observer observer : list) {
			observer.update(this);
		}
	}
}
//具体观察者对象的实现
public class RealObserver extends Subjecct {
    //被观察对象的属性
	 private int state;
	 public int getState(){
		 return state;
	 }
	 public void  setState(int state){
		 this.state=state;
		 //主题对象(目标对象)值发生改变
		 this.notifyAllObserver();
	 }
}
public class Client {

	public static void main(String[] args) {
		// 目标对象
		RealObserver subject = new RealObserver();
		// 创建多个观察者
		ObserverA obs1 = new ObserverA();
		ObserverA obs2 = new ObserverA();
		ObserverA obs3 = new ObserverA();
		// 注册到观察队列中
		subject.registerObserver(obs1);
		subject.registerObserver(obs2);
		subject.registerObserver(obs3);
		// 改变State状态
		subject.setState(300);
		System.out.println(obs1.getMyState());
		System.out.println(obs2.getMyState());
		System.out.println(obs3.getMyState());
		// 改变State状态
		subject.setState(400);
		System.out.println(obs1.getMyState());
		System.out.println(obs2.getMyState());
		System.out.println(obs3.getMyState());
	}
}

猜你喜欢

转载自blog.csdn.net/qq_35418518/article/details/89260405
今日推荐