欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用实例讲解工厂方法模式

程序员文章站 2024-01-05 12:27:16
...

原有需求

public class FactoryMethodTest {
    public static void main(String[] args) {
        new Application().getProduct().method1();
        /**
         * ProductA.method1 executed..
         */
    }
}

class ProductA{
    public void method1(){
        System.out.println("ProductA.method1 executed..");
    }
}
class Application{

    private ProductA createProduct(){
        return new ProductA();
    }
    ProductA getProduct(){
        ProductA product = createProduct();
        // ..
        return product;
    }
}

使用简单工厂

public class FactoryMethodTest {
    public static void main(String[] args) {
        new Application().getProduct("1").method1();
        /**
         * ProductA.method1 executed..
         */
    }
}
interface Product{
    void method1();
}
class ProductFactory{
    static Product getProduct(String type){
        if("1".equals(type)){
            return new ProductA();
        } else {
            return new ProductB();
        }
    }
}
class ProductA implements Product{
    @Override
    public void method1(){
        System.out.println("ProductA.method1 executed..");
    }
}
class ProductB implements Product{
    @Override
    public void method1(){
        System.out.println("ProductB.method1 executed..");
    }
}
class Application{
    Product createProduct(String type){
        return ProductFactory.getProduct(type);
    }
    Product getProduct(String type){
        Product product = createProduct(type);
        // 一系列操作共同的预处理操作。。。
        return product;
    }
}

工厂方法模式

// 工厂方法模式
public class FactoryMethodTest {
    public static void main(String[] args) {
        Application applicationA = new ApplicationA();
        applicationA.getProduct().method1();
        /**
         * ProductA.method1 executed..
         */
    }
}
interface Product{
    void method1();
}
class ProductA implements Product{
    @Override
    public void method1(){
        System.out.println("ProductA.method1 executed..");
    }
}
class ProductB implements Product{
    @Override
    public void method1(){
        System.out.println("ProductB.method1 executed..");
    }
}
abstract class Application{
    abstract Product createProduct();
    public Product getProduct(){
        // 一系列操作共同的预处理操作。。。
        return createProduct();
    }
}
class ApplicationA extends Application{

    @Override
    Product createProduct() {
        // ...
        return new ProductA();
    }
}
class ApplicationB extends Application{

    @Override
    Product createProduct() {
        // ...
        return new ProductB();
    }
}

上一篇:

下一篇: