码迷,mamicode.com
首页 > 其他好文 > 详细

工厂模式

时间:2016-05-05 17:28:08      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

工厂方法模式分为三种:

一、普通工厂模式,建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

1、创建公共接口

public interface Fruit {

    public void showPrice();
}

 

2、创建产品类,分别为AppleFactory.java和PearFactory.java

public class AppleFactory implements Fruit{

    public void showPrice() {
        System.out.println("$1.1");
    }

}

public class PearFactory implements Fruit{

    public void showPrice() {
        System.out.println("pear price is $0.5");
    }

}

3、创建工厂类

public class SimpleFactoryMethod {
    public Fruit produce(String type) {
        if ("Apple".equals(type)) {
            return new AppleFactory();
        }
        else if ("Pear".equals(type)) {
            return new PearFactory();
        } else {
            System.out.println("输入正确的类型 ");
            return null;
        }
    }
}

4、最后测试类

public class FactoryTest {

    public static void main(String[] args) {
        SimpleFactoryMethod factory = new SimpleFactoryMethod();
        Fruit fruit = factory.produce("Apple");
        fruit.showPrice();
    }
}

5、输出结果:$1.1

 

二、多工厂方法

多工厂方法就是用多个生产产品的方法代替type的分支

public class MultiFactoryMethod {
    
    public Fruit produceApple() {
        return new AppleFactory();
    }
    
    public Fruit producePear() {
        return new PearFactory();
    }

}

 

三、静态工厂方法模式

将上面的多个工厂方法模式里面的方法设置为静态的,不需要创建工厂实例,直接调用即可。

public class MultiFactoryMethod {
    
    public static Fruit produceApple() {
        return new AppleFactory();
    }
    
    public static Fruit producePear() {
        return new PearFactory();
    }

}

工厂模式适合有大量产品需要创建,并且具有共同接口时,可以通过工厂方法模式创建。以上三种模式中,第一种如果传入的type字符串有误,不能正确的创建对象,第三种相对于第二种就不需要实例化工厂类,故大多数情况下都是用第三种静态工厂方法模式。

 

四、抽象工厂模式(Abstract Factory)

工厂方法模式有一个问题,类的创建依赖工厂类,如果想拓展产品,必须对工厂类进行修改,这违背了闭包原则,所以抽象工厂模式就诞生了,可以创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

抽象工厂不好理解,其实我们先把抽象工厂分成两个部分:产品、工厂类。上面提到的工厂类就只有一个,里面包含了多个产品的生成,而抽象工厂你可以简单的理解为一个工厂生成一类产品,多个工厂生成多类产品,暂时可以理解工厂类和产品类是一对一的关系。如果这一步理解了,就可以扩展,一个工厂同样可以对应多类产品。

先看看代码,一个工厂类只负责生产一类产品。

产品类:AppleProduct.java和 PearProduct.java

public interface Fruit {

    public void showName();
}
public class AppleProduct implements Fruit{

    public void showName() {
        System.out.println("i am apple");
    }

}
public class PearProduct implements Fruit{

    public void showName() {
        System.out.println("i am pear");
    }

}

工厂类:AppleFactory.java 、PearFactory.java、抽象接口Provider.java

public class AppleFactory implements Provider{

    public Fruit produce() {
        return new AppleProduct();
    }

}
public class PearFactory implements Provider{

    public Fruit produce() {
        return new PearProduct();
    }

}
public interface Provider {

    public Fruit produce();
}

我们看到一个工厂类只生产一个产品类,

测试代码如下:

public class Test {

    public static void main(String[] args) {
        Provider provider = new AppleFactory();
        Fruit fruit = provider.produce();
        fruit.showName();
    }
}

测试结果:

i am apple

ok,这样理解是不是很easy啦。

 

工厂模式

标签:

原文地址:http://www.cnblogs.com/speculator/p/5462392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!