工厂方法模式,解决了 工厂模式中,需要增加或者删除产品 必须修改 工厂类的弊端。
把生产产品扔给具体的工厂, 因为 每个产品都对应一个工厂。
主要组成部分:
1 Car 定义了所有产品(这里是汽车)的共有熟悉, 汽车必须有引擎
public abstract class Car {
public abstract void eingee();
}
2 汽车有很多品牌 比如 宝马 朗逸
2.1 定义 宝马
public class BmwCar extends Car {
public BmwCar()
{
System.out.println("宝马哦");
}
@Override
public void eingee() {
System.out.println("宝马引擎");
}
}
2.2 定义 朗逸
public class AudiCAR extends Car {
public AudiCAR()
{
System.out.println("朗逸哦,是 上海大众工厂生产");
}
@Override
public void eingee() {
System.out.println("朗逸的引擎");
}
}
3 好了 , 我需要什么产品 已经定义好了 我们现在需要 建工厂了
先定义一个 所有工厂 必须要实现的功能, 生产汽车! 必须的
public interface CarFactory {
public Car getCar();
}
4 有2个品牌的汽车 我们需要建2个生产线(工厂)
4.1 北京奔驰汽车厂
public class BjFactory implements CarFactory {
public BjFactory()
{
System.out.println("北京奔驰戴克 接到订单");
}
@Override
public Car getCar() {
return new BmwCar();
}
}
4.2 上海大众汽车厂
public class ShangHaiFactory implements CarFactory {
public ShangHaiFactory()
{
System.out.println("上海大众 收到订单");
}
@Override
public Car getCar() {
return new AudiCAR();
}
}
5 客户
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//需要 买宝马520
CarFactory bjFactory=new BjFactory();
Car bm520=bjFactory.getCar();
bm520.eingee();
//需要买 朗逸
CarFactory shangHaiFactory=new ShangHaiFactory();
Car lavida=shangHaiFactory.getCar();
lavida.eingee();
}
}
结果:
北京奔驰戴克 接到订单
宝马哦
宝马引擎
上海大众 收到订单
朗逸哦,是 上海大众工厂生产
朗逸的引擎
6 如果以后 要生产 北京212 怎么办
没关系, 只需要 增加一个 产品类
public class bj20 extends Car {
public bj20()
{
System.out.println("北京吉普212 不是以前的 vj2020");
}
@Override
public void eingee() {
System.out.println(" 北京制造出品的bj20 是国产引擎 哎 ");
}
}
再盖一个工厂(生产线)
public class Bj212Factory implements CarFactory {
public Bj212Factory()
{
System.out.println("北京制造 伟利达经销商 发来订单");
}
@Override
public Car getCar() {
return new bj20();
}
}