思想:将创建何种工具交由工厂。将原本逻辑if...else...中“变”的部分抽离为具体工具类,调用方通过在工厂中传入标志符来确定创建何种工具
结构图:
代码实现:
抽象工具类:
public abstract class FAbsStep { public abstract void run(); }
具体工具类:
public class FBanmaStep extends FAbsStep{ public void run() { System.out.println("斑马编译步骤开始执行"); System.out.println("斑马编译步骤..."); System.out.println("斑马编译步骤执行结束"); } } public class FshangqiStep extends FAbsStep{ public void run() { System.out.println("上汽编译步骤开始执行"); System.out.println("上汽编译步骤..."); System.out.println("上汽编译步骤执行结束"); } }
工厂类:用于创建具体工具(通过传入string类型标志位来判断创建何种工具)
public class Ffactory { public FAbsStep getStep(String name) { //通过name来判断创建何种具体工具 if(name.equals("banma")) { return new FBanmaStep(); }else { return new FshangqiStep(); } } }
main方法
public class Fmain { public static void main(String[] args) { Ffactory tfactory=new Ffactory(); FAbsStep step=tfactory.getStep("shangqi"); //创建出具体工具实例 step.run(); //执行具体实例方法 } }
思想:根据传入何种策略具体执行对应行为
结构图:
代码实现:
抽象策略:
public abstract class TAbsStep { public abstract void run(); }
具体策略:
public class TBanmaStep extends FAbsStep{ public void run() { System.out.println("斑马编译步骤开始执行"); System.out.println("斑马编译步骤..."); System.out.println("斑马编译步骤执行结束"); } } public class TshangqiStep extends FAbsStep{ public void run() { System.out.println("上汽编译步骤开始执行"); System.out.println("上汽编译步骤..."); System.out.println("上汽编译步骤执行结束"); } }
环境类:抽象策略类作为成员变量,接收具体策略
//TEnvironment环境类,用户传入具体策略类名进而执行具体策略 public class TEnvironment { private FAbsStep fAbsStep; //抽象策略 策略类作为环境类的成员变量 public TEnvironment(FAbsStep fAbsStep) { //环境类构造方法,抽象策略作为形参 this.fAbsStep=fAbsStep; } public void exec() { fAbsStep.run(); } }
main类:
public class Tmain { public static void main(String[] args) { TEnvironment tEnvironment = new TEnvironment(new TshangqiStep()); //环境类传入具体策略方法,用来执行对应策略方法 tEnvironment.exec(); } }
简单工厂VS策略
1.首先看一下接收的参数:简单工厂类中的Ffactory.getStep() 方法接收的是字符串,返回的是一个 FAbsStep(抽象工厂类)对象;而 策略模式Environment 类初始化时需要接收一个 new TshangqiStep()(具体策略类)对象。
2.简单工厂类中是根据接收的条件创建一个相应的对象,而 Context 类接收的是一个对象,可以调用方法去执行此对象的方法
总结简单工厂模式和策略模式
1.从类型上说:简单工厂模式属于创建型模式,而策略模式属于行为型模式。
2.接下来,看一个小例子:
斧子有很多种,有一个工厂专门负责生产各种需求的斧子。
工厂模式:
1)根据你给出的目的来生产不同用途的斧子,例如要砍人,那么工厂生产砍人斧子,要伐木就生产伐木斧子。
2)即根据你给出一些属性来生产不同行为的一类对象返回给你。
3)关注对象创建
策略模式:
1)用工厂生产的斧子来做对应的事情,例如用砍人的斧子来砍人,用伐木的斧子来伐木。
2)即根据你给出对应的对象来执行对应的方法。
3)关注行为的选择
3.简单工厂模式:根据客户选择的条件,来帮客户创建一个对象。
策略模式:客户给它一个创建好的对象,它来帮客户做相应的事
原文:https://www.cnblogs.com/enhance/p/11176226.html