电面问道设计模式,回答了代理模式,装饰者模式,单例模式,工厂模式。
然后面试官问了工厂模式,然后又问我知不知道策略模式。。(不知道)
以为只是随便一问,但是刚搜策略模式的时候发现他跟工厂模式类似。。唉
工厂模式
属于创建型模式,根据用户传入的参数,来创建出不同的对象。
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的策略的对象进行操作。