定义:工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定那一个类实例化,而不必事先知道每次要实例化哪一个类。
工厂模式的三种形态:
简单工厂模式:又称静态工厂方法
工厂方法模式:简单工厂模式的一种升级,又称堕胎性工厂模式或虚拟构造子模式
抽象工厂模式:又称工具箱模式
简单工厂模式专门定义一个类来负责其他类的实例,被创建的实例通常有共同的父类或接口。
适用于:工厂类负责创建的对象比较少。
缺点:增加系统类的个数,增加了系统的复杂度和理解难度;系统扩展困难;违背了对扩展开放,对修改关闭的原则。
实例及其注释//接口,相当于生产产品的东西
//Car相当于对这两个产品进行产品说明,说明完后就可以实现对产品的构造
public interface Car {
public abstract void production();//接口内定义产品介绍的一个方法,来介绍宝马汽车和奔驰汽车
}
public class BenChi implements Car{ //奔驰汽车实现于Car这个接口
@Override //实现这个接口需要重写接口里的方法
public void production(){
System.out.println("这是奔驰汽车");
}
}
public class BaoMa implements Car{
@Override
public void production(){
System.out.println("这是宝马汽车");
}
}
public class FactoryCar {
public void productCar(String type){ //在汽车工厂内定义一个生产汽车的方法,定义一个参数的汽车类型
if(type.equals("BenChi")){ //做判断
BenChi bc=new BenChi();//实例化
bc.production();//通过实例化对象调用产品方法
System.out.println("工厂正在生产奔驰汽车"); //建造语句
}else if(type.equals("BaoMa")){
BaoMa bm=new BaoMa();
bm.production();
System.out.println("工厂正在生产宝马汽车");
}
}
}
public class SimpleFactoryTest {
public static void main(String[] args) {
FactoryCar fc=new FactoryCar();
fc.productCar("BenChi");
fc.productCar("BaoMa");
}
}
输出
这是奔驰汽车
工厂正在生产奔驰汽车
这是宝马汽车
工厂正在生产宝马汽车
工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
适用于:一个类不知道它所需要的对象的类。
缺点:如果要新建产品需要编写新的具体产品类,增加了系统的复杂性
实例及注释public interface Car {
public abstract void prection();
}
public interface CarFactory {//汽车工厂接口里面定义两个方法
public abstract void carFactory();//汽车工厂方法
public abstract void productCar();//生产汽车方法
}
public class FactoryBenChi implements CarFactory{//奔驰汽车类实现于汽车工厂这个接口
@Override//重写汽车工厂方法
public void carFactory(){
System.out.println("这是奔驰汽车工厂");
}
@Override//重写奔驰汽车工厂
public void productCar(){
System.out.println("奔驰工厂正在生产奔驰汽车");
}
}
public class FactoryBaoMa implements CarFactory{
@Override
public void carFactory(){
System.out.println("这是奔驰宝马工厂");
}
@Override
public void productCar(){
System.out.println("奔驰工厂正在生产宝马汽车");
}
}
public class BenChi extends FactoryBaoMa implements Car{//奔驰产品实现于这个接口后需要重写接口中的方法
@Override
public void prection(){
System.out.println("这是奔驰汽车");
}
}
public class BaoMa extends FactoryBaoMa implements Car{
//产品实现于产品接口,继承于产品工厂类;产品工厂实现于工厂这个接口
//汽车产品继承于汽车工厂才能实现汽车制造
//所以宝马类继承于宝马工厂
@Override
public void prection(){
System.out.println("这是宝马汽车");
}
}
public class FactoryProduct {
public static void main(String[] args) {
BenChi bc=new BenChi();
bc.prection();
bc.carFactory();
bc.productCar();
System.out.println("==================");
BaoMa bm=new BaoMa();
bm.prection();
bm.carFactory();
bm.productCar();
}
}
输出
这是奔驰汽车
这是奔驰宝马工厂
奔驰工厂正在生产宝马汽车
==================
这是宝马汽车
这是奔驰宝马工厂
奔驰工厂正在生产宝马汽车
抽象工厂模式
提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们具体的类
对工厂方法的一个优化及升级,对一个类进行建造
优点:系统扩展相对于工厂方法模式更为简单优点: 1.具体产品在应用层的代码隔离,无需关系创建的细节 2.将一个系列的产品统一到一起创建 缺点:规定了所有可能被创建的产品集合,产品族中扩展新的产品困难;增加了系统的抽象性和理解难度
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)