Eddyer
发下工资正心凉,一紧张,码全忘。似曾相识,何用却不详。设计模式两茫茫,看代码,泪千行。步出小窝见同事,都一样,很受伤。如此工资,无颜见嫩娘。只待晚上交钱日,接绳套,系房梁。

分为三类:

简单工厂模式(sipple factory)

也叫静态工厂模式,一般是具体产品的继承类或者是接口的实现,如下拿一个司机开多种车的例子。传参确定车的类型。

package com.eddy.test.factory.demo1;

/**
 * Created by eddy on 2015/10/15.
 */
public interface Car {

    public void drive();
}
package com.eddy.test.factory.demo1;

/**
 * Created by eddy on 2015/10/15.
 */
public class BaoMaCar implements Car {
    @Override
    public void drive() {
        System.out.println("BaoMaCar");
    }
}
package com.eddy.test.factory.demo1;

/**
 * Created by eddy on 2015/10/15.
 */
public class BenChiCar implements Car {
    @Override
    public void drive() {
        System.out.println("BenChiCar");
    }

}
package com.eddy.test.factory.demo1;

/**
 * Created by eddy on 2015/10/15.
 */
public class QQCar implements Car {
    @Override
    public void drive() {
        System.out.println("QQCar");
    }
}

其工厂类。

package com.eddy.test.factory.demo1;

/**
 * Created by eddy on 2015/10/15.
 */
public class FactoryStatic {

    public static Car getCar(String carName){
        if(carName.equalsIgnoreCase("QQCar")){
            return new QQCar();
        }else if(carName.equalsIgnoreCase("BaoMaCar")){
            return new BaoMaCar();
        }else if(carName.equalsIgnoreCase("BenChiCar")){
            return new BenChiCar();
        }
        return null;
    }

    public static void main(String[] args){
        //传参确定车的类型。
        Car baoMaCar = FactoryStatic.getCar("BaoMaCar");
        baoMaCar.drive();
    }
}

工厂方法模式(factory method)

如上,如果是一部车对应一个司机的话,可先要叫得这个司机,然后再去取车子,开宝马的司机去开宝马,开奔驰的司机去开奔驰。

package com.eddy.test.factory.demo2;

/**
 * Created by eddy on 2015/10/15.
 */
public interface Driver {

    public Car driveCar();

}
package com.eddy.test.factory.demo2;

/**
 * Created by eddy on 2015/10/15.
 */
public class BaoMaDriver implements Driver {
    @Override
    public Car driveCar() {
        return (Car) new BaoMaDriver();
    }
}
package com.eddy.test.factory.demo2;

import com.eddy.test.factory.demo1.QQCar;

/**
 * Created by eddy on 2015/10/15.
 */
public class QQDriver implements Driver {
    @Override
    public Car driveCar() {
        return (Car) new QQCar();
    }
}
package com.eddy.test.factory.demo2;

import com.eddy.test.factory.demo1.BaoMaCar;

/**
 * Created by eddy on 2015/10/15.
 */
public class BenChiDriver implements Driver {
    @Override
    public Car driveCar() {
        return (Car) new BaoMaCar();
    }

    public static void main(String[] args){
        //找到开宝马的司机
        BaoMaDriver baoMaDriver = new BaoMaDriver();
        //叫他去开宝马
        Car car = baoMaDriver.driveCar();
        car.drive();
    }
}

 

posted on 2015-10-15 17:56  Eddyer  阅读(99)  评论(0)    收藏  举报