策略模式、模板模式、观察者模式、适配器模式

模板模式
模版方法定义了算法的步骤,把这些步骤的实现延迟到了子类。

模版方法模式为我们提供了一种代码复用的重要技巧。

模版方法的抽象类可以定义具体方法、抽象方法和钩子。

抽象方法由子类实现。

为了防止子类改变模版方法中的算法,可以将模版方法声明为final
模版方法和策略模式都封装了算法,一个用组合(策略模式),一个用继承(模版方法)。

泡咖啡和泡茶的案例
1.定义一个模板类(流程方法(final),各步骤方法(抽象方法),加上判断方法,通过子类不同的实现来改变流程中是否执行(钩子))
2.具体的流程来实现模板的步骤方法
3.通过多态,调用父类的流程方法

策略模式
定义一组算法,将每个算法都封装起来,使得它们之间可以相互替换。策略模式让算法独立于调用它的客户端而独立变化。

玩枪战类游戏,可以根据不同战场情况,切换枪支。

抽象策略:通常由接口或抽象类实现
具体策略:实现抽象策略接口
环境类:类中持有对一个抽象策略的引用,set方法和get方法(给环境中传入什么策略,就会实现不同的方法)

优点在于:可以轻易的扩展与改变策略,可以动态改变对象的行为。
缺点在于:客户端必须知道所有的策略类,并自行决定使用哪一种。每个具体的策略都会产生一个新类,这样会造成很多策略类。

扫描二维码关注公众号,回复: 3452770 查看本文章

观察者模式
其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。

1.定义一个抽象被观察者接口
声明了添加、删除、通知观察者方法
2.定义一个抽象观察者接口
声明一个更新的方法
3.定义被观察者(相当于微信公众号)
对Observerable接口的三个方法进行了具体实现,同时有一个List集合,用以保存注册的观察者,等需要通知观察者时,遍历该集合即可。
4.定义具体观察者,微信公众号的具体观察者为用户User

适配器模式

情景模拟:一个笔记本需要三孔插座,现在只有一个两孔的插座,所以需要适配器。

 1.抽取出三孔插座的特征,即定义一个接口。

 2.一个现成的两孔插座

3.适配器:实现三孔插座的特征(接口),内部保留一个两孔插座引用,在实现的方法中调用两孔插座的功能。

4.笔记本调用三孔插座时,可以把适配器传入。

public interface ThreePlugif {
	public void powerthree();

}
package com.Adapter;

public class Twoplug {
        public void powerwithtwo(){
        	System.out.println("使用二项插座供电");
        }
}
package com.Adapter;

public class Adapterplug implements ThreePlugif{
  private Twoplug plug;
  public Adapterplug(Twoplug plug) {
	  this.plug=plug;
	// TODO 自动生成的构造函数存根
}
	public void powerthree() {
		// TODO 自动生成的方法存根
		System.out.println("通过转化");
		plug.powerwithtwo();
	}
          
}
package com.Adapter;

public class Laptop {
 private ThreePlugif plug;
 public Laptop(ThreePlugif plug) {
		this.plug = plug;
	}
 public void charge(){
	 plug.powerthree();
 }

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Twoplug  twoplug=new Twoplug();
		ThreePlugif plug =new Adapterplug(twoplug);
          Laptop laptop=new Laptop(plug);
          laptop.charge();
	}

	
}

猜你喜欢

转载自blog.csdn.net/qq_35240226/article/details/82950962