设计模式:简单工厂与策略模式

简单工厂,真的是特别简单的一个设计模式。
工厂方法内定义需要用到的方法的父类,
根据传递的参数来决定实例化何种子类对象。

//算法的父类,抽象出返回结果的接口
public interface Operation {
    public abstract double getResult(double a,double b);
}

//工厂类,用于生产相应的算法子类
public class OperationFactory {
    public Operation CreateOperation(String str){
        Operation ope=null;
        switch (str){
            case "+":
                ope=new OperationAdd();
                break;
            case "-":
                ope=new OperationSub();
                break;
        }
        return ope;
    }
}

//算法子类,由工厂类创建,重写父类中的虚函数
public class OperationAdd implements Operation {
    @Override
    public double getResult(double a, double b) {
        return a+b;
    }
}

策略模式

摘自百度百科

策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
策略模式的优点有:策略模式提供了管理相关的算法族的办法、策略模式提供了可以替换继承关系的办法、使用策略模式可以避免使用多重条件转移语句。

Strategy提供一个接口,供算法实现
ConcreteStrategy 具体实现类
Context 维护一个Strategy对象,使用ConcreteStrategy的方法,动态设置 需要运行的方法

Strategy.java

public interface Strategy {
    public String  printAnswer();
}

ConcreteStrategy.java

public class ConcreteStrategy1 implements Strategy {
    @Override
    public String printAnswer() {
        return "this is method 1";
    }
}

Context.java

public class Context {
    private Strategy strategy;

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

    public String getResult(){
        return strategy.printAnswer();
    }
}



Client.java

public class Client {
  public static void main(String args[]){
      Context context=null;
      context=new Context(new ConcreteStrategy1());
      System.out.println(context.getResult());
  }
}

策略模式与简单工厂结合

Context.java

public class Context {
    private Strategy strategy;
    Context(String type){
        switch (type){
            case "1":
                strategy=new ConcreteStrategy1();
                break;
            case "2":
                strategy=new ConcreteStrategy2();
                break;
        }
    }

    public String getResult(){
        return strategy.printAnswer();
    }

}

Client.java

public class Client {
  public static void main(String args[]){
      Context context=null;
      context=new Context("1");
      System.out.println(context.getResult());
      context=new Context("2");
      System.out.println(context.getResult());
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值