工场模式和策略模式

电面问道设计模式,回答了代理模式,装饰者模式,单例模式,工厂模式。
然后面试官问了工厂模式,然后又问我知不知道策略模式。。(不知道)
以为只是随便一问,但是刚搜策略模式的时候发现他跟工厂模式类似。。唉


工厂模式

属于创建型模式,根据用户传入的参数,来创建出不同的对象。

1、简单工厂
一个工场,生产一种产品

package gcms;

public class Factory {

public static Milk getMilk(int type){
    if(type == 1){
        return new A();
    }else{
        return new B();
    }
}

public static void main(String[] args) {
    Factory.getMilk(1).show();
}

}

class Milk{

public void show(){
    System.out.println("牛奶");
}

}

class A extends Milk{

public void show(){
    System.out.println("蒙牛");
}
}


class B extends Milk{

public void show(){
    System.out.println("伊利");
}
}

2、抽象工厂
多个工场,生产多个产品。
工场为抽象类。生成各种产品的子工程继承他

public abstract class Factory{
    public abstract Sample creator();
    public abstract Sample2 creator(String name);
}
public class SimpleFactory extends Factory{
    public Sample creator(){
        .........
        return new SampleA
    }
    public Sample2 creator(String name){
        .........
        return new Sample2A
    }
}

public class BombFactory extends Factory{
    public Sample creator(){
        ......
        return new SampleB
    }
    public Sample2 creator(String name){
        ......
        return new Sample2B
    }
}

2、策略模式
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。

具体代码可以看
https://blog.csdn.net/zhangliangzi/article/details/52161211


两者区别
工厂模式侧重于对象的创建,根据用户的传递不同参数,由工厂来创建对象。

策略模式侧重于对算法的封装,由客户本身创建对象,选择相应的策略给对象,最后由客户自己创建的对象来执行。

摘自https://www.cnblogs.com/langtianya/archive/2013/03/08/2950934.html

简单工厂模式:客户端传一个条件进工厂类,工厂类根据条件创建相应的产品类对象,并return给客户端,供客户端使用。即客户端使用的是工厂类生产的产品对象。

策略模式:客户端创建一个Context类对象a(可以看作是工厂模式中工厂类),创建一个策略对象并传参给对象a,然后客户端使用a对象的某些方法来使用前面传参进来的策略,即客户端是通过a对象使用策略的。

简单的说,

1、工厂模式根据条件生产出产品给客户端用。而策略模式是客户端使用传参给Context的策略(你也可以理成产品),传入策略的不同,调用同样方法得到的结果也不同。

2、工厂模式:客户端是使用工厂类生产的对象进行操作,策略模式:客户端使用自己传给Context的策略的对象进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值