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

设计模式之工厂模式

时间:2017-07-09 23:01:26      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:style   extend   pack   创建对象   otf   dex   pre   extends   void   

定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

好处: 良好的封装性,调用一个产品只需要知道产品的类名即可。再次,屏蔽产品类,例如在从Mysql切换到Oracle的时候,只需要切换一下驱动名称即可。

package nyx.learn.factory;

public abstract class AbstractFactory {
    public abstract <T extends IHuman> T createHuman(Class<T> c);
}
package nyx.learn.factory;

public class HumanFactory extends AbstractFactory{

    @Override
    public <T extends IHuman> T createHuman(Class<T> c) {
        IHuman human = null;
        try {
            System.out.println(c.getName());
            human = (IHuman)Class.forName(c.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return (T)human;
    }
    
}
package nyx.learn.factory;

public interface IHuman {
    void getColor();
    void talk();
}
package nyx.learn.factory;

public class BlackHuman implements IHuman {

    @Override
    public void getColor() {
        System.out.println("黑色皮肤!");
    }

    @Override
    public void talk() {
        System.out.println("说黑话!");
    }

}
package nyx.test.factory;

import nyx.learn.factory.AbstractFactory;
import nyx.learn.factory.BlackHuman;
import nyx.learn.factory.HumanFactory;

public class Main {
    public static void main(String[] args) {
        AbstractFactory factory = new HumanFactory();
        BlackHuman human = factory.createHuman(BlackHuman.class);
        human.getColor();
        human.talk();
    }
}

 

 

工厂模式的扩展:

1、缩小为简单工厂 SimpleFactory

package nyx.learn.factory;

public class SimpleFactory {
    public static <T extends IHuman> T createHuman(Class<T> c){
        IHuman human = null;
        try {
            human = (IHuman)Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return (T)human;
    }
}
package nyx.test.factory;

import nyx.learn.factory.BlackHuman;
import nyx.learn.factory.IHuman;
import nyx.learn.factory.SimpleFactory;

public class Main {
    public static void main(String[] args) {
        IHuman human = SimpleFactory.createHuman(BlackHuman.class);
        human.getColor();
        human.talk();
    }
}

简单工厂就是在工厂模式的基础上,去掉继承的抽象类,将方法改成static关键字。可以不需要new 一个工厂,直接调用工厂,产生产品类,简化模式。

 

设计模式之工厂模式

标签:style   extend   pack   创建对象   otf   dex   pre   extends   void   

原文地址:http://www.cnblogs.com/xz-blogs/p/7143263.html

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