设计模式--抽象工厂模式

抽象工厂模式是在工厂模式之上又细化了一点,
记得模式工厂中我是定义car接口然后实现car接口的方法:
这里我将car细分为SuvCar和MiniCar;

接着我便一步一步给自己回顾:

定义SuvCar和MiniCar接口:

/**
*

  • @author dch

*/

//定义一个SuvCar的接口
public interface SuvCar {

//定义一个抽象方法
public void showInfoSuvCar();

}

/**
*

  • @author dch

*/
//定义一个MiniCar的接口
public interface MiniCar {

//定义一个抽象方法
public void showInfoMiniCar();

}

同样定义BMSuvCar,BMMiniCar和ADSuvCar,ADMiniCar四个类实现对应接口方法;

BMSuvCar:
/**
*

  • @author dch

*/
//定义一个宝马SuvCar类来实现SuvCar接口
public class BMSuvCar implements SuvCar{

@Override
//宝马SuvCar类重写接口的方法
public void showInfoSuvCar() {
	// TODO Auto-generated method stub
	System.out.println("我是宝马suv汽车");
}

}

BMMiniCar:
/**
*

  • @author dch

*/
//定义一个宝马MiniCar类来实现MiniCar接口
public class BMMiniCar implements MiniCar{

@Override
//宝马MiniCar类重写接口的方法
public void showInfoMiniCar() {
	// TODO Auto-generated method stub
	System.out.println("我们是宝马Mini汽车");
}

}

ADSuvCar:

/**
*

  • @author dch

*/
//定义一个奥迪SuvCar类来实现SuvCar接口
public class ADSuvCar implements SuvCar{

@Override
//奥迪SuvCar类重写接口的方法
public void showInfoSuvCar() {
	// TODO Auto-generated method stub
	System.out.println("我是奥迪Suv汽车");
}

}

ADMiniCar:

/**
*

  • @author dch

*/
//定义一个奥迪MiniCar类来实现接口的方法
public class ADMiniCar implements MiniCar{

@Override
//奥迪MiniCar类来重写接口的方法
public void showInfoMiniCar() {
	// TODO Auto-generated method stub
	System.out.println("我是奥迪Mini汽车");
}

}

接下来就是工厂来创建对应的对象来调用对应的方法:

定义一个汽车工厂CarFactory接口:
而这个接口里面则包含SuvCar和MiniCar两个接口名作为引用的数据类型;

/**
*

  • @author dch

*/
//定义一个汽车工厂接口
public interface CarFactory {

//定义生产的方法
public MiniCar produceMiniCar();
public SuvCar  produceSuvCar();

}

同样的BMCarFactory宝马汽车工厂实现接口的两个方法:
/**
*

  • @author dch

*/
//定义一个宝马汽车工厂来实现汽车工厂的接口方法
public class BMCarFactory implements CarFactory{

@Override
public MiniCar produceMiniCar() {
	// TODO Auto-generated method stub
	return new BMMiniCar();
}

@Override
public SuvCar produceSuvCar() {
	// TODO Auto-generated method stub
	return new BMSuvCar();
}

}

同样的ADCarFactory宝马汽车工厂实现接口的两个方法:
/**
*

  • @author dch

*/
//定义奥迪汽车工厂来实现汽车工厂的接口
public class ADCarFactory implements CarFactory{

@Override
public MiniCar produceMiniCar() {
	// TODO Auto-generated method stub
	return new ADMiniCar();
}

@Override
public SuvCar produceSuvCar() {
	// TODO Auto-generated method stub
	return new ADSuvCar();
}

}

测试类:
/**
*

  • @author dch

*/
//测试类
public class Test {

/**
 * @param args
 */
public static void main(String[] args) {
	// TODO Auto-generated method stub

	CarFactory factory = new BMCarFactory();
	SuvCar suvCar = factory.produceSuvCar();
	MiniCar miniCar = factory.produceMiniCar();
	suvCar.showInfoSuvCar();
	miniCar.showInfoMiniCar();
	
	CarFactory factory2 = new ADCarFactory();
	MiniCar miniCar2 = factory2.produceMiniCar();
	SuvCar suvCar2 = factory2.produceSuvCar();
	miniCar2.showInfoMiniCar();
	suvCar2.showInfoSuvCar();
	
}

}
抽象工厂模式:
是在工厂模式上将car细分成SuvCar和MiniCar两种不同类型的汽车,
从而达到让汽车更加详细,而不是统一的叫汽车
当然我自己要明白的是,当我们企图增加时,自己要明白我只能加不同品牌的这两种类型的汽车,
而不是又增加了另外一种类型汽车,例如越野型汽车,这是做不到的,
我只能增加例如大众SuvCar和大众MiniCar,
这说明类型不能变,其他的我自己就不用在解释.

简单工厂和工厂方法、抽象工厂的区别和用途
1、简单工厂,对用不同产品的批量创建 , 优点: 创建对象时配置信息高度统一,缺点:扩展产品时需要修改工厂。
2、工厂方法:在简单工厂的基础上可以任意扩展不同的产品 , 优点: 可扩展性好 ,缺点: 对于不同品牌,相同型号的扩展依然需要修改工厂
3、抽象工厂: 在工厂方法的基础上,可扩展相同型号,不同品牌的产品 ,前提是工厂的型号一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值