工厂模式java

工厂模式java,第1张

定义:工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定那一个类实例化,而不必事先知道每次要实例化哪一个类。

工厂模式的三种形态:

简单工厂模式:又称静态工厂方法

工厂方法模式:简单工厂模式的一种升级,又称堕胎性工厂模式或虚拟构造子模式

抽象工厂模式:又称工具箱模式

简单工厂模式

专门定义一个类来负责其他类的实例,被创建的实例通常有共同的父类或接口。

适用于:工厂类负责创建的对象比较少。

缺点:增加系统类的个数,增加了系统的复杂度和理解难度;系统扩展困难;违背了对扩展开放,对修改关闭的原则。

实例及其注释
//接口,相当于生产产品的东西
//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.将一个系列的产品统一到一起创建 缺点:规定了所有可能被创建的产品集合,产品族中扩展新的产品困难;增加了系统的抽象性和理解难度

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/799691.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存