Thursday 30 November 2017

工厂模式

很久没有写技术类的博客了。 其实不是没有来写,而是懒。
设计模式看了很久,但是因为实践少,老是忘记, 很生气, 这次决定写个博客来强制自己记住它。

工厂模式

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
工厂模式可以分为三类:

1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory)

Simple factory
http://blog.csdn.net/jason0539/article/details/23020989

这里使用了别人博客的例子。 BMW是一个抽象类, BMW523,BMW320是具体的BMW类。工厂负责生产不同的BMW类, 而客户只需要调用FatoryBMW 并指明自己想要的具体类则足以。 (IT中,没有什么问题是多加一层解决不了的,如果解决不了,那就加两层)
这里是custom类代码:
public class Customer {
public static void main(String[] args) {
Factory factory = new Factory();
BMW bmw523 = factory.createBMW(523);
BMW bmw320 = factory.createBMW(320); }
}


Factory Method
工厂模式中, 把简单工厂模式的Factory变成一个接口,这个接口由实现各个产品的工厂来实现。 比如根据上面的例子, 会增加 FactoryBMW523和FactoryBMW320的类,它们implements FactoryBMW接口中的方法。工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。


Abstract factory
抽象工厂模式用于生产一个由不同组件组成的产品。 比如之前的例子, 320型号的车需要B型号的马达, 523需要A型号的空调。 这样我们需要新加入马达的抽象类,空调的抽象类以及它们各种型号的具体类。在工厂的接口里,需要增添产品组件的方法:
//创建工厂的接口    
public interface AbstractFactory {    
    //制造发动机  
    public Engine createEngine();  
    //制造空调   
    public Aircondition createAircondition();   
}    
  
  
//为宝马320系列生产配件    
public class FactoryBMW320 implements AbstractFactory{    
        
    @Override    
    public Engine createEngine() {      
        return new EngineA();    
    }    
    @Override    
    public Aircondition createAircondition() {    
        return new AirconditionA();    
    }    
}    
//宝马523系列  
public class FactoryBMW523 implements AbstractFactory {    
    
     @Override    
    public Engine createEngine() {      
        return new EngineB();    
    }    
    @Override    
    public Aircondition createAircondition() {    
        return new AirconditionB();    
    }    
  
  
}   

博客参考:http://blog.csdn.net/jason0539/article/details/44976775

No comments:

Post a Comment