設計模式案例--工廠模式--抽象工廠(abstractfactory)

抽象工廠(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();
	}
}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章