工厂模式

100 阅读1分钟

简单工厂

package factory.simple;

import factory.Apple;
import factory.Banana;
import factory.Fruit;
import factory.Mango;

public class SimpleFactory {
    public Fruit bugFruit(String type) {
        if ("1".equals(type)) {
            return new Apple();
        } else if ("2".equals(type)) {
            return new Banana();
        } else if ("3".equals(type)) {
            return new Mango();
        } else {
            return null;
        }
    }
}

测试

package factory.simple;

public class SimpleFactoryTest {
    public static void main(String[] args) {
        SimpleFactory simpleFactory = new SimpleFactory();
        System.out.println(simpleFactory.bugFruit("1"));
        System.out.println(simpleFactory.bugFruit("2"));
        System.out.println(simpleFactory.bugFruit("3"));
    }
}

工厂方法

package factory.func;

import factory.Fruit;

public interface FunctionFactory {

    Fruit buyFruit();

}
package factory.func;

import factory.Apple;
import factory.Fruit;

public class AppleFactory implements FunctionFactory {
    @Override
    public Fruit buyFruit() {
        return new Apple();
    }
}
package factory.func;

import factory.Banana;
import factory.Fruit;

public class BananaFactory implements FunctionFactory {
    @Override
    public Fruit buyFruit() {
        return new Banana();
    }
}
package factory.func;

import factory.Fruit;
import factory.Mango;

public class MangoFactory implements FunctionFactory {
    @Override
    public Fruit buyFruit() {
        return new Mango();
    }
}

测试

package factory.func;

public class FunctionFactoryTest {

    public static void main(String[] args) {
        FunctionFactory appleFactory = new AppleFactory();
        System.out.println(appleFactory.buyFruit());

        FunctionFactory bananaFactory = new BananaFactory();
        System.out.println(bananaFactory.buyFruit());

        MangoFactory mangoFactory = new MangoFactory();
        System.out.println(mangoFactory.buyFruit());
    }

}

抽象工厂

package factory.abstr;

import factory.Fruit;

public abstract class AbstractFactory {

    abstract Fruit buyApple();

    abstract Fruit buyBanana();

    abstract Fruit buyMango();

}
package factory.abstr;

import factory.Apple;
import factory.Banana;
import factory.Fruit;
import factory.Mango;
import factory.func.AppleFactory;
import factory.func.BananaFactory;
import factory.func.MangoFactory;

public class FruitFactory extends AbstractFactory{
    @Override
    Fruit buyApple() {
//        return new Apple();
        return new AppleFactory().buyFruit(); // 组合
    }

    @Override
    Fruit buyBanana() {
//        return new Banana();
        return new BananaFactory().buyFruit(); // 组合
    }

    @Override
    Fruit buyMango() {
//        return new Mango();
        return new MangoFactory().buyFruit(); // 组合
    }
}
package factory.abstr;

public class AbstractFactoryTest {

    public static void main(String[] args) {
        AbstractFactory factory = new FruitFactory();
        System.out.println(factory.buyApple());
        System.out.println(factory.buyBanana());
        System.out.println(factory.buyMango());
    }

}

公用接口和实体

package factory;

public interface Fruit {
    String getName();
}
package factory;

public class Apple implements Fruit {
    @Override
    public String getName() {
        return "苹果";
    }
}
package factory;

public class Banana implements Fruit {
    @Override
    public String getName() {
        return "香蕉";
    }
}
package factory;

public class Mango implements Fruit {
    @Override
    public String getName() {
        return "芒果";
    }
}