读书笔记之设计模式(工厂模式)

1.简单工厂模式

简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式中包含如下几个角色:
- 工厂角色
- 抽象产品角色
- 具体产品角色

代码示例

抽象产品

//抽象产品角色主要是提供所有实例的公共接口
public interface Car{
    public void drive();
} 

具体产品

public class BenzCar implements Car{
    @Override
    public void drive(){
        System.out.println("驾驶奔驰车");
    }
}
public class QCar implements Car{
    @Override
    public void drive(){
        System.out.println("驾驶QQ车");
    }
}

工厂角色

public class CarFactory{
    public static Car getCar(String carName){
        if("Benz".equals(carName)){
            return new BenzCar();
        }else if("QQ".equals(carName)){
            return new QCar();
        }else{
            return null;
        }
    }
}

测试类

public class TestClient {
    public static void main(String[] args) {
        Car car1 = CarFactory.getCar("Benz");
        car1.drive();
        Car car2 = CarFactory.getCar("QQ");
        car2.drive();
    }
}

2.工厂模式

工厂方法模式:
- 一个抽象产品类,可以派生出多个具体产品类。
- 一个抽象工厂类,可以派生出多个具体工厂类。
- 每个具体工厂类只能创建一个具体产品类的实例。

工厂模式其实就是简单工厂模式的进一步抽象,在工厂模式中不像简单工厂模式那样由一个工厂角色类去决定实例化哪个产品,而是交给了抽象工厂的子类去决定。

代码示例

抽象产品

public interface Car{
    public void drive();
}  

具体产品

public class BenzCar implements Car{
    @Override
    public void drive(){
        System.out.println("驾驶奔驰车");
    }
}
public class QCar implements Car{
    @Override
    public void drive(){
        System.out.println("驾驶QQ车");
    }
}

抽象工厂

public abstract class CarFactory{
    abstract Car create();
}

具体工厂

public class BenzFactory extends CarFactory{
    public Car create() {
        return new BenzCar();
    }
}
public class QFactory extends CarFactory{
    public Car create() {
        return new QCar();
    }
}

测试类

public class TestClient {
    public static void main(String[] args) {
        CarFactory factory = new BenzFactory();
        Car car = factory.create();
        car.drive();
    }
}

3.抽象工厂模式

  • 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
  • 一个抽象工厂类,可以派生出多个具体工厂类。
  • 每个具体工厂类可以创建多个具体产品类的实例。

代码示例

抽象产品1

public interface Car{
    public void drive();
}  

具体产品1

public class BenzCar implements Car{
    @Override
    public void drive(){
        System.out.println("驾驶奔驰车");
    }
}
public class QCar implements Car{
    @Override
    public void drive(){
        System.out.println("驾驶QQ车");
    }
}

抽象产品2

public interface Plane{
    public void fly();
}  

具体产品2

public class BoeingPlane implements Plane{
    @Override
    public void fly(){
        System.out.println("驾驶波音747");
    }
}
public class ToyPlane implements Plane{
    @Override
    public void fly(){
        System.out.println("驾驶玩具飞机");
    }
}

抽象工厂类

public abstract class AbstractFactory {
    public abstract Car createCar();
    public abstract Plane createPlane();
}

具体工厂类

public class MoneyFactory extends AbstractFactory{
    @Override
    public Car createCar() {
        return new BenzCar();
    }
    @Override
    public  Plane createPlane() {
        return new BoeingPlane();
    }
}

测试类

public class TestClient {
    public static void main(String[] args) {
        AbstractFactory f = new MoneyFactory();
        Car c = f.createCar();
        c.drive();
        Plane p = f.createPlane();
        p.fly();
    }
}