Android开发 设计模式(二、 Factory Method(工厂方法模式))

二、 Factory Method(工厂方法模式)

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

了解工厂方法模式,要从工厂模式说起,工厂模式可以分为三类:

(1)简单工厂模式(Simple Factory)

(2)工厂方法模式(Factory Method)

(3)抽象工厂模式(Abstract Factory)

而有的书上将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

在还没有工厂的时代,如果一个客户要一款宝马车,客户就会自己去制造一辆:

产品类:

// BMWX5.java

public class BMWX5 {

      publicBMWX5(){

             System.out.println("制造一辆宝马X5");

      }

}

// BMWX6.java

public class BMWX6 {

      publicBMWX6(){

             System.out.println("制造一辆宝马X6");

      }

}

客户类:

// Comsumer.java

public class Comsumer {

      publicstatic void main(String[] args) {

             BMWX5x5 = new BMWX5();

             BMWX6x6 = new BMWX6();

      }

}

后来出现了工业革命,客户不用亲自去制造汽车了,因为客户开了一个制造汽车的工厂,想要什么样的车,这个工厂可以制造。

产品类:

// BMW.java

public abstract class BMW {

      publicBMW(){

      }

}

// BMWX5.java

public class BMWX5 extends BMW {

      publicBMWX5() {

             System.out.println("制造一辆宝马X5");

      }

}

// BMWX6.java

public class BMWX6 extends BMW{

      publicBMWX6(){

             System.out.println("制造一辆宝马X6");

      }

}

工厂类:

// Factory.java

public class Factory {

      publicstatic BMW createBMW(String type) {

             if(type== "X5")

                    returnnew BMWX5();

             elseif(type == "X6")

                    returnnew BMWX6();

             elsereturn null;

      }

}

客户类:

// Customer.java

public class Customer {

      publicstatic void main(String[] args) {

             Factoryfactory = new Factory();

             BMWx5 = factory.createBMW("X5");

             BMWx6 = factory.createBMW("X6");

      }

}

宝马车系列越来越多,如320i、523i、30li等系列,一个工厂已经无法创建所有的宝马车系列。于是又单独分出来多个具体的工厂。每个具体工厂创建一种系列。即具体工厂类只能创建一个具体产品。但是宝马工厂还是个抽象。你需要指定某个具体的工厂才能生产车出来。

产品类:

// BMW.java

public abstract class BMW {

      publicBMW(){

      }

}

// BMWX5.java

public class BMWX5 extends BMW {

      publicBMWX5() {

             System.out.println("制造一辆宝马X5");

      }

}

// BMWX6.java

public class BMWX6 extends BMW{

      publicBMWX6(){

             System.out.println("制造一辆宝马X6");

      }

}

工厂类:

// FactoryBMW.java

public interface FactoryBMW {

      BMWcreateBMW();

}

// FactoryBMWX5.java

public class FactoryBMWX5implements FactoryBMW{

      publicBMWX5 createBMW() {

             returnnew BMWX5();

      }

}

// FactoryBMWX6.java

public class FactoryBMWX6 implements FactoryBMW{

      publicBMWX6 createBMW() {

             returnnew BMWX6();

      }

}

客户类:

// Customer.java

public class Customer {

      publicstatic void main(String[] args) {

             FactoryBMWX5factoryBMWX5 = new FactoryBMWX5();

             BMWX5x5 = factoryBMWX5.createBMW();

             FactoryBMWX6factoryBMWX6 = new FactoryBMWX6();

             BMWX6x6 = factoryBMWX6.createBMW();

      }

}


猜你喜欢

转载自blog.csdn.net/xhf_123/article/details/49849563
今日推荐