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

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

烤鱼店之工厂模式类图:
烤鱼店之工厂模式类图
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();
    }

}

运行结果:

一条烤鲫鱼
一条烤鲶鱼
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值