前言
设计模式这个东西真的很完美,但是再完美的东西也要看场景,就像原子+原子 != 原子一样,用不好可能会起反作用。不上定义,太拗口了,看例子、看例子。
1.什么是工厂方法模式
工厂方法模式是指定义一个创建对象的接口,但具体实例哪个对象,由实现了这个接口的类来决定,工厂方法让让类的实例推迟到子类进行。
翻译成人话,首先你需要一个公共的部分,比如说一辆车,你肯定要有四个轱辘,和一个架子,然后你要有变化的部分,比如说发动机、内饰,车的牌子有N多种,但是不变的肯定是轱辘和架子,这个就是公共的部分,变动的是零件,可能我这辆车有氮气急速装置,另外一辆没刹车,这个地方就需要多个了。
上代码写一写
//首先找到公共部分并抽出来,由其它所有有这个属性的对象去实现
//以追女朋友为例,女朋友的共同属性,首先要是女性
interface GirlFriend{
void female();
}
//首先要是girl
class Aloof implements GirlFriend{
Override
public void female(){
System.out.println("找到了一名性格高冷的女生");
}
}
class Hot implements GirlFriend{
Override
public void female(){
System.out.println("找到了一名性格火热的女生");
}
}
//这样稳定部分已经抽出来了,下面处理不稳定的部分
//定义一个抽象类,因为需要一个必须实现的抽象方法,可以理解每个女孩子都有不同的特点,
//比如说高冷和火热
abstract class Application{
//子类必须实现的方法,理解为类型
abstract GirlFriend girlType();
GirlFriend getObject(){
GirlFriend girl = girlType();
return girl;
}
}
//定义两个子类
class ChaseAloof extends Application{
@Override
Product girlType() {
log.info("this girl is Aloof")
return new Aloof ();
}
}
class ChaseHot extends Application{
@Override
Product girlType() {
log.info("this is girl is Hot");
return new Hot ();
}
}
//不同类型的女生已经定义好了,下面想追哪个那就自己决定了
public static void main(String[] args) {
//比如说想追高冷的
Application application = new ChaseAloof ();
//先找到这种类型的女孩
GirlFriend girl = application.girlType();
girl.female();
}