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

简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例
举一个例子,现在我们要创建面包对象,我们将Bread设计成抽象类,同时创建面包工厂SimpleBreadFactory.
类图如下:
这里写图片描述
类的代码如下:

1 BreadStore.java

public class BreadStore {

    private Bread bread=null;
    private SimpleBreadFactory factory;

    public BreadStore(SimpleBreadFactory factory){
        this.factory = factory;
    }

    public Bread orderBread(String type){
        bread = factory.createBread(type);
        bread.prepare();
        bread.bake();
        bread.box();
        return bread;
    }
}

2 SimpleBreadFactory.java

public class SimpleBreadFactory {

    Bread bread = null;
    public Bread createBread(String type){
        if(type.equals("agg")){
            bread =  new AggBread();
        }else if(type.equals("cheese")){
            bread = new CheeseBread();
        }else{
            bread = new BufferBread("buffer");
        }

        return bread;
    }
}

3 Bread.java

public abstract class Bread {
    abstract void prepare();
    abstract void bake();
    abstract void box();
}

4 AggBread.java

public class AggBread extends Bread {

    @Override
    void prepare() {
        System.out.println("agg bread is preparing...");
    }

    @Override
    void bake() {
        System.out.println("agg bread is baking...");
    }

    @Override
    void box() {
        System.out.println("agg bread is boxing...");
    }

}

5 BufferBread.java

public class BufferBread extends Bread {

    @Override
    void prepare() {
        System.out.println("buffer bread is preparing...");
    }

    @Override
    void bake() {
        System.out.println("buffer bread is baking...");
    }

    @Override
    void box() {
        System.out.println("buffer bread is boxing...");
    }
}

6 CheeseBread.java

public class CheeseBread extends Bread {

    @Override
    void prepare() {
        System.out.println("cheese bread is preparing...");
    }

    @Override
    void bake() {
        System.out.println("cheese bread is baking...");
    }

    @Override
    void box() {
        System.out.println("cheese bread is boxing...");
    }
}

7 测试程序

public class BreadTestDrive {

    public static void main(String[] args) {
        BreadStore store = new BreadStore(new SimpleBreadFactory());
        store.orderBread("agg");
        store.orderBread("cheese");
        store.orderBread("buffer");

    }

}

测试结果

agg bread is preparing...
agg bread is baking...
agg bread is boxing...
cheese bread is preparing...
cheese bread is baking...
cheese bread is boxing...
buffer bread is preparing...
buffer bread is baking...
buffer bread is boxing...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值