工厂方法模式

工厂方法模式使用平率非常高。日常开发中总能看到它的身影。例如Spring的BeanFactory,MyBatis的DataSourceFactory。

下面举一个例子

  比如生产Iphone手机,就可以使用工厂模式。UML 如下

工厂方法模式

Iphone 手机包含Iphone4,Iphone4s。。。。。。IphoneX 等。

Iphone4,Iphone4s。。。。。。IphoneX都属于Iphone系列,处于同一产品等级(同一产品等级用工厂模式,不同产品等级和产品族用抽象工厂模式)。

代码如下

Iphone 接口

package factory;

/**
 * Created by dingshuangkun on 2018/1/26.
 */
public interface Iphone {

    void produceIphone();
}

Iphone4,Iphone5,Iphone6。

package factory.impl;

import factory.Iphone;

/**
 * Created by dingshuangkun on 2018/1/26.
 */
public class Iphone4 implements Iphone {
    @Override
    public void produceIphone() {
        System.out.println("------生产Iphone4--------");
    }
}

 

  

package factory.impl;

import factory.Iphone;

/**
 * Created by dingshuangkun on 2018/1/26.
 */
public class Iphone5 implements Iphone {

    @Override
    public void produceIphone() {
        System.out.println("------生产Iphone5--------");
    }
}

 

package factory.impl;

import factory.Iphone;

/**
 * Created by dingshuangkun on 2018/1/26.
 */
public class Iphone6 implements Iphone {

    @Override
    public void produceIphone() {
        System.out.println("------生产Iphone6--------");
    }
}

 

Creator  接口

package factory;

/**
 * Created by dingshuangkun on 2018/1/26.
 */
public interface Creator {

    <T extends Iphone> T creatorProduct(Class<T> c);
}

 

CreatorFactory

package factory.impl;

import factory.Creator;
import factory.Iphone;

/**
 * Created by dingshuangkun on 2018/1/26.
 */
public class CreatorFactor implements Creator {

    @Override
    public <T extends Iphone> T creatorProduct(Class<T> c) {
        Iphone iphone = null;
        try {
            iphone = c.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return (T) iphone;
    }
}

 

Client 

package factory;

import factory.impl.CreatorFactor;
import factory.impl.Iphone4;
import factory.impl.Iphone5;
import factory.impl.Iphone6;

/**
 * Created by dingshuangkun on 2018/1/26.
 */
public class Client {

    public static void main(String[] args) {
        Creator creator = new CreatorFactor();
        Iphone iphone4 =  creator.creatorProduct(Iphone4.class);
        Iphone iphone5 = creator.creatorProduct(Iphone5.class);
        Iphone iphone6 =creator.creatorProduct(Iphone6.class);
        iphone4.produceIphone();
        iphone5.produceIphone();
        iphone6.produceIphone();
    }
}

 

运行结果 如下

------生产Iphone4--------
------生产Iphone5--------
------生产Iphone6--------

Process finished with exit code 0

转载于:https://my.oschina.net/u/3218528/blog/1613546