抽象工厂模式的概念

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

抽象工厂模式的类图:

 

(1)生产奔驰的接口Benz:

 

package com.ssy.wlj.abstractfactory;

/**
 * 奔驰产品的抽象接口
 * @author Administrator
 * @since 2019/05/25
 *
 */
public interface Benz {
    void carColor();//设置颜色
    void carSpeed();//设置速度
    void carPrice();//设置价格
}

(2)生产车辆导航仪的接口类:

package com.ssy.wlj.abstractfactory;

/**
 * 车辆导航仪的抽象产品接口类
 * @author Administrator
 * @since 2019/05/25
 *
 */
public interface CarNavigator {
    void navigatorColor();//导航仪的颜色
    void navigatorPrice();//导航仪的价格
}

(3)奔驰工厂的抽象接口类BanzFactory:

package com.ssy.wlj.abstractfactory;

/**
 * 奔驰工厂的抽象接口
 * @author Administrator
 * @since 2019/05/25
 *
 */
public interface BanzFactory {
     //创建奔驰的方法
      Benz createCar();
    //创建导航仪的方法
    CarNavigator createNacigator();
}

(4)生产奔驰车辆C180和相关导航仪的具体工厂类:

package com.ssy.wlj.abstractfactory;

public class C180Factory implements BanzFactory {
    @Override
    public Benz createCar() {
        return new BenzC180();
    }

    @Override
    public CarNavigator createNacigator() {
        return new C180Navigator();
    }
}

(5)生产奔驰车辆Z260和相关导航仪的具体工厂类:

package com.ssy.wlj.abstractfactory;

public class E260Factory implements BanzFactory {
    @Override
    public Benz createCar() {
        return new BenzE260();
    }

    @Override
    public CarNavigator createNacigator() {
        return new E260Navigator();
    }
}

 

(6)生产奔驰车辆C180的具体产品类:

package com.ssy.wlj.abstractfactory;

/**
 * 奔驰C180的生产的具体类
 * @author Administrator
 * @since 2019/05/25
 *
 */
public class BenzC180 implements Benz {

    public BenzC180() {
        carColor();
        carPrice();
        carSpeed();
    }

    @Override
    public void carColor() {
        System.out.println("奔驰C180的颜色是银白色");
    }

    @Override
    public void carSpeed() {
        System.out.println("奔驰C180的速度是200公里每小时");
    }

    @Override
    public void carPrice() {
        System.out.println("奔驰C180的价格是100万");
    }

}

(7)生产奔驰车辆C180对应导航仪的具体产品类:

package com.ssy.wlj.abstractfactory;

public class C180Navigator implements CarNavigator {
    
    C180Navigator(){
        navigatorColor();
        navigatorPrice();
    }

    @Override
    public void navigatorColor() {
        System.out.println("汽车C180的导航仪颜色:黑色");
    }

    @Override
    public void navigatorPrice() {
        System.out.println("汽车C180的导航仪价格:480元");
    }

}

(8)生产奔驰车辆E260的具体产品类:

package com.ssy.wlj.abstractfactory;

/**
 * 奔驰E260的生产的具体类
 * @author Administrator
 *
 */
public class BenzE260 implements Benz {
    
    public BenzE260() {
        carColor();
        carPrice();
        carSpeed();
    }

    @Override
    public void carColor() {
        System.out.println("奔驰E260的颜色是银白色");
    }

    @Override
    public void carSpeed() {
        System.out.println("奔驰E260的速度是200公里每小时");
    }

    @Override
    public void carPrice() {
        System.out.println("奔驰E260的价格是100万");
    }

}

(7)生产奔驰车辆E260对应导航仪的具体产品类:

package com.ssy.wlj.abstractfactory;

public class E260Navigator implements CarNavigator {
    
    E260Navigator(){
        navigatorColor();
        navigatorPrice();
    }

    @Override
    public void navigatorColor() {
        System.out.println("汽车E260的导航仪颜色:白色");
    }

    @Override
    public void navigatorPrice() {
        System.out.println("汽车E260的导航仪价格:880元");
    }

}

客户端调用:

package com.ssy.wlj.abstractfactory;

public class Client {
    public static void main(String[] a) {
        System.out.println("生产奔驰车C180");
        //父类但对象子类的实例
        BanzFactory banzFactory = new C180Factory();//创建一个C180工厂
        //调用父类的方法,这就是java多态的一种体现
        banzFactory.createCar();//C180工厂生产车辆C180
        banzFactory.createNacigator();//生产车辆C180对应的导航仪

        System.out.println("=========================================");
        System.out.println("生产奔驰车Z260");
        BanzFactory banzFactory2 = new E260Factory();
        banzFactory2.createCar();//E260工厂生产车辆E260
        banzFactory2.createNacigator();//生产车辆E260对应的导航仪

    }
}

 

posted on 2019-05-24 16:38  友帅老师  阅读(173)  评论(0)    收藏  举报