抽象工厂模式的概念
定义: 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
意图: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式的类图:
(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对应的导航仪
}
}