首页 > 其他 > 详细

简单工厂模式和策略模式

时间:2019-07-12 16:32:06      阅读:92      评论:0      收藏:0      [点我收藏+]

1、简单工厂类

  思想:将创建何种工具交由工厂。将原本逻辑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();  //执行具体实例方法
    }
}

 

  

2、策略模式

  思想:根据传入何种策略具体执行对应行为

  结构图:

  技术分享图片

  

  代码实现:

  抽象策略:

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!