您的位置:首页 > 编程语言 > Java开发

java设计模式之工厂方法模式

2017-02-04 21:04 393 查看
工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

烤鱼店之工厂模式类图:



FactoryFish中的Fish实例化延迟到子类NianYuFactory,JiYuFactory中来实例化。这是工厂方法模式和简单工厂模式的区别。

Fish类代码实现:

public class Fish {

String name = "Unknow name";
}


NianYu类代码实现:

public class NianYu extends Fish{

public NianYu() {
// TODO Auto-generated constructor stub
name = "鲶鱼";
System.out.println("一条烤"+name);
}
}


JiYu类代码实现:

public class JiYu extends Fish{

public JiYu() {
// TODO Auto-generated constructor stub
name = "鲫鱼";
System.out.println("一条烤"+name);
}
}


FactoryFish类代码实现:

public abstract class FactoryFish {

public abstract Fish createFish();
}


NianYuFactory类代码实现:

public class NianYuFactory extends FactoryFish{

@Override
public Fish createFish() {
// TODO Auto-generated method stub
return new NianYu();
}

}


JiYuFactory类代码实现:

public class JiYuFactory extends FactoryFish{

@Override
public Fish createFish() {
// TODO Auto-generated method stub
return new JiYu();
}

}


KaoYu类代码实现:

public class KaoYu {

FactoryFish factoryFish;

public KaoYu(FactoryFish factoryFish){
this.factoryFish =factoryFish;
}

public void orderFish(){
factoryFish.createFish();
}
}


FishTest类代码实现:

public class FishTest {

public static void main(String[] args){
FactoryFish factoryFish = new JiYuFactory();
KaoYu kaoYu = new KaoYu(factoryFish);
kaoYu.orderFish();

FactoryFish factoryFish2 = new NianYuFactory();
KaoYu kaoYu2 = new KaoYu(factoryFish2);
kaoYu2.orderFish();
}

}


运行结果:

一条烤鲫鱼
一条烤鲶鱼
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息