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

工厂模式

时间:2018-08-16 01:01:47      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:border   ack   ace   order   log   war   创建   port   roo   

 

工厂模式相当于创建对象的new。如A a=new A(). 工厂模式也是用来创建实例对象的,但它是面向接口编程,提高了代码的扩展性和维护性。

例:这两天我太累了,想去按摩店按摩。每位技师都有不同的特长,我只需要告诉她我要什么服务,她就能帮忙实现,而不需要管具体是哪位技师。

技术分享图片
//创建对象的接口
public interface Massage {
    //需要按摩服务
    public void massagist();
}
//工厂1
class Massage1 implements Massage{
    @Override
    public void massagist() {
        System.out.println("7号技师为您泰式足底按摩90分钟");
    }
}
//工厂2
class Massage2 implements Massage{
    @Override
    public void massagist() {
        System.out.println("13号技师为您精油推背90分钟");
    }
}
//工厂3
class Massage3 implements Massage{
    @Override
    public void massagist() {
        System.out.println("27号技师为你前列腺按摩120分钟");
    }
}
技术分享图片

测试类:

技术分享图片
//测试类
public class Test {

    public static void main(String[] args) {
        Massage m1 = new Massage1();
        m1.massagist();
        
        Massage m2 = new Massage2();
        m2.massagist();
        
        Massage m3 = new Massage3();
        m3.massagist();
    }
}



=========================
【控制台输出】


7号技师为您泰式足底按摩90分钟
13号技师为您精油推背90分钟
27号技师为你前列腺按摩120分钟
技术分享图片

 spring中工厂模式的实现

技术分享图片
// 创建bean工厂
public interface BeanFactory {  
    Object getBean(String id) throws ExecutionException;
}

// Bean工厂的实现类
public class ClassPathXmlApplicationContext implements BeanFactory {
    
    private Map<String, Object> map = new HashMap<String, Object>();
    
    @SuppressWarnings("unchecked")
    public ClassPathXmlApplicationContext(String fileName) throws DocumentException, InstantiationException, IllegalAccessException, ClassNotFoundException {
        
         //加载配置文件
         SAXReader reader = new SAXReader(); 
         Document document = reader.read(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream(fileName));
         
         //获取根节点
         Element root = document.getRootElement(); 
         //获取子节点
         List<Element> childElements = root.elements();
         
         for (Element element : childElements) {
             map.put(element.attributeValue("id"), Class.forName(element.attributeValue("class")).newInstance());
         }
    }

    @Override
    public Object getBean(String id) throws ExecutionException {
        return map.get(id);
    }

}
技术分享图片

工厂模式

标签:border   ack   ace   order   log   war   创建   port   roo   

原文地址:https://www.cnblogs.com/wangchao422/p/9484265.html

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