java设计模式之简单工厂模式

简单工厂模式(Simple Factory Pattern)又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。

简单工厂模式其实不是一个设计模式,反而比较像是一种编程习惯。但由于经常被使用,所以我们先来学习。

用简单工厂模式写的烤鱼店实例类图如下:
烤鱼店实例类图
客人通过KaoYu类的orderFish()方法来点单,SimpleFishFactory类的orderFish()负责创建不同烤鱼类型,Fish是烤鱼父类,CaoYu,NianYu,JiYu,LuYu是具体实现。

Fish类代码实现:

public class Fish {

    String name = "Unknow name";

    public String getname(){
        return name;
    }
}

CaoYu类代码实现:

public class CaoYu extends Fish{

    public CaoYu(){
        name = "草鱼";
        System.out.println("烤"+name);
    }
}

NianYu类代码实现:

public class NianYu extends Fish{

    public NianYu(){
        name = "鲶鱼";
        System.out.println("烤"+name);
    }
}

JiYu类代码实现:

public class JiYu extends Fish{

    public JiYu(){
        name = "鲫鱼";
        System.out.println("烤"+name);
    }
}

LuYu类代码实现:

public class LuYu extends Fish{

    public LuYu(){
        name = "鲈鱼";
        System.out.println("烤"+name);
    }
}

SimpleFishFactory类代码实现:

public class SimpleFishFactory {

    public Fish createFish(String type){
        if (type.equals("CaoYu")) {
            return new CaoYu();
        }else if (type.equals("NianYu")) {
            return new NianYu();
        }else if (type.equals("JiYu")) {
            return new JiYu();
        }else if (type.equals("LuYu")) {
            return new LuYu();
        }
        return null;
    }
}

createFish方法根据传进来的不同参数,返回一个对应的对象。

KaoYu类代码实现:

public class KaoYu {

    SimpleFishFactory factory;

    public KaoYu(SimpleFishFactory factory){
        this.factory = factory;
    }

    public Fish orderFish(String type){
        Fish fish;
        fish = factory.createFish(type);
        System.out.println("我是一条烤"+fish.getname());
        return fish;
    }
}

KaoYu类传进来一个SimpleFishFactory对象,然后orderFish根据type来返回一个对应的对象。

测试类KaoYuTest代码实现:

public class KaoYuTest {

    public static void main(String[] args){

        SimpleFishFactory factory = new SimpleFishFactory();
        KaoYu kaoYu = new KaoYu(factory);
        kaoYu.orderFish("JiYu");
    }
}

执行结果:

烤鲫鱼
我是一条烤鲫鱼
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值