抽象工廠(abstractfactory)
1、抽象工廠類
package com.dou361.factory;
import com.dou361.car.BenzCar;
import com.dou361.car.BmwCar;
/**
* @author Admin
*抽象工廠
*一般項目從這裏先開始
*抽象工廠模式的應用場景:每一個模式都是針對一定問題的解決方案。
*抽象工廠模式與工廠方法模式的最大區別就在於,
*工廠方法模式針對的是一個產品等級結構;
*而抽象工廠模式則需要面對多個產品等級結構。
*產品族和產品等級的概念.
*
*抽象工廠的創建步驟
*1創建一個抽象的工廠接口,提取公共的方法,這裏需要和產品等級接口的對象建立關係,需要定義方法創建抽象產品的對象
*2工廠根據族的個數來創建實現的工廠
*3產品對象,根據產品等級的個數來創建接口
*4實現具體的產品對象,個數一般是(具體工廠數*產品等級接口數)
*/
public interface CarAbstractFactory {
BenzCar createBenzCar();
BmwCar createBmwCar();
}
2、具體工廠類
package com.dou361.factory.impl;
import com.dou361.car.BenzCar;
import com.dou361.car.BmwCar;
import com.dou361.car.impl.SportsBenzCar;
import com.dou361.car.impl.SportsBmwCar;
import com.dou361.factory.CarAbstractFactory;
public class SportsCarFactory implements CarAbstractFactory{
@Override
public BenzCar createBenzCar() {
return new SportsBenzCar();
}
@Override
public BmwCar createBmwCar() {
return new SportsBmwCar();
}
}
package com.dou361.factory.impl;
import com.dou361.car.BenzCar;
import com.dou361.car.BmwCar;
import com.dou361.car.impl.BussinessBenzCar;
import com.dou361.car.impl.BussinessBmwCar;
import com.dou361.factory.CarAbstractFactory;
public class BussinessCarFactory implements CarAbstractFactory {
@Override
public BenzCar createBenzCar() {
return new BussinessBenzCar();
}
@Override
public BmwCar createBmwCar() {
return new BussinessBmwCar();
}
}
3、抽象汽車類
package com.dou361.car;
public interface Car {
void drive();
}
package com.dou361.car;
public interface BmwCar extends Car {
void exhaust();
}
package com.dou361.car;
public interface BenzCar extends Car {
void weight();
}
4、具體汽車類
package com.dou361.car.impl;
import com.dou361.car.BenzCar;
public class BussinessBenzCar implements BenzCar {
@Override
public void drive() {
System.out.println("商務Benz車");
}
@Override
public void weight() {
System.out.println("2.5個噸位");
}
}
package com.dou361.car.impl;
import com.dou361.car.BmwCar;
public class BussinessBmwCar implements BmwCar {
@Override
public void drive() {
System.out.println("商務Bmw車");
}
@Override
public void exhaust() {
System.out.println("節能型");
}
}
package com.dou361.car.impl;
import com.dou361.car.BenzCar;
public class SportsBenzCar implements BenzCar {
@Override
public void drive() {
System.out.println("運動Benz車");
}
@Override
public void weight() {
System.out.println("2.0個噸位");
}
}
package com.dou361.car.impl;
import com.dou361.car.BmwCar;
public class SportsBmwCar implements BmwCar {
@Override
public void drive() {
System.out.println("運動Bmw車");
}
@Override
public void exhaust() {
System.out.println("二級節能型");
}
}
5、測試類
package com.dou361.test;
import com.dou361.car.BenzCar;
import com.dou361.factory.CarAbstractFactory;
import com.dou361.factory.impl.BussinessCarFactory;
public class Magnate {
public static void main(String[] args) {
CarAbstractFactory abstractFactory = new BussinessCarFactory();
BenzCar benzCar = abstractFactory.createBenzCar();
benzCar.drive();
benzCar.weight();
}
}