工厂模式

Posted wangchao422

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式相关的知识,希望对你有一定的参考价值。

 

工厂模式相当于创建对象的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);
    }

}
技术分享图片

以上是关于工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式工厂方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式-简单工厂工厂方法模式抽象工厂模式详解

C++工厂模式(简单工厂工厂方法抽象工厂)