博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java设计模式之工厂设计模式
阅读量:4552 次
发布时间:2019-06-08

本文共 2788 字,大约阅读时间需要 9 分钟。

一、简单工厂

/** 简单工厂(静态工厂)* *//** 抽象产品类* */interface CarProduct{    /*    * 抽象产品类的抽象方法show()。    * */    public void show();}/** 具体产品类* */class BigCarProduct implements CarProduct{    public void show(){        System.out.println("It is a BigCar");    } }  /* * 具体工厂类 * */class CarFacory{    /*    * 静态工厂方法。    * 实例化一个BigCarProduct对象。    * */    public static BigCarProduct createBigCar(){        return new BigCarProduct();    }}public class FactoryDP {    public static void main(String[] args) {        BigCarProduct bigcar = CarFacory.createBigCar();        bigcar.show();    }}/** output:* It is a BigCar* */

二、工厂方法

/** 工厂方法模式* *//** 抽象产品类* */interface CarProduct{    public void show();}/** 具体产品类* */class BigCarProduct implements CarProduct{    @Override    public void show() {        System.out.println("It is a BigCar");    }}/** 抽象工厂类* */interface CarFactory{    public CarProduct createCar();}/** 具体工厂类* */class BigCarFactory implements CarFactory{    @Override    /*    * 创建产品类方法    * */    public BigCarProduct createCar() {        return new BigCarProduct();    }}public class FactoryDP {    public static void main(String[] args) {      BigCarFactory bigCarFactory = new BigCarFactory();      BigCarProduct bigCarProduct = bigCarFactory.createCar();      bigCarProduct.show();    }}/**output:*It is a BigCar*/

三、抽象工厂

/** 抽象工厂模式* *//** 抽象产品类* */interface CarProduct{    public void show();}/** 具体产品类* */class BigCarProduct implements CarProduct{    @Override    public void show() {        System.out.println("It is a BigCar");    }}class SmartCarProduct implements CarProduct{    @Override    public void show() {        System.out.println("It is a SmartCar");    }}/** 抽象工厂类* */interface CarFactory{    public CarProduct createBigCar();    public CarProduct createSmartCar();}/** 具体工厂类* */class CarBothFactory implements CarFactory{    /*    * 创建产品类方法    * */    @Override    public BigCarProduct createBigCar() {        return new BigCarProduct();    }    @Override    public SmartCarProduct createSmartCar() {        return new SmartCarProduct();    }}public class FactoryDP {    public static void main(String[] args) {     CarBothFactory carbothFactory =  new CarBothFactory();     carbothFactory.createBigCar().show();     carbothFactory.createSmartCar().show();    }}/** output:* It is a BigCar*It is a SmartCar* */

四、总结

上面介绍了三种工厂设计模式,其实当你仔细思考他们的原理时其实都是同一个思想,即将产品的生产和产品的获取解耦。

在上面的三种工厂模式中,对于用户来说,不需要知道BigCar与SmartCar是如何进行创建并进行相应配置的,他们只需要获取一个这种Car的工厂,然后调用工厂里的生产方法,即可得到相应的产品。这就是将两者解耦了,也消除了显式的实例化操作。

而这三者又有何区别呢?

1.简单工厂是静态工厂,所以他的生产产品的方法是静态的,在Java面向对象的语法中他自然的丧失了一部分特性,即动态绑定等,因为它属于类而不是对象。

2.工厂方法和抽象工厂其实没什么区别,你从代码中就可以看到,不同之处就在于它将一个产品再度的进行了分类,而那个用来分类的标准的术语叫做产品族,这里的产品族就是Big和Smart,当一个产品需要以一个或多个产品族进行分类时,你写的工厂方法自然就变成了抽象工厂。

转载于:https://www.cnblogs.com/old-driver-lgq/p/10806285.html

你可能感兴趣的文章
jquery简单的表单验证充值数量
查看>>
大叔手记(1):使用Visual Studio的查找与替换替代默认的系统搜索
查看>>
Android手机监控软件设计实现
查看>>
oracle 应用程序调用存储函数
查看>>
洛谷 P3629 [APIO2010]巡逻 解题报告
查看>>
Fedora 23+CUDA 8.0+ GTX970 安装
查看>>
在Visual Studio中开发一个C语言程序
查看>>
课程总结
查看>>
openstack新建虚机、网络、路由时候对应的ovs网桥的变化
查看>>
linux 编译运行c文件
查看>>
Scrapy的学习和使用
查看>>
7.内部类(一)之详解内部类
查看>>
1.messager消息提示框
查看>>
[PY]进制转换
查看>>
STL系列 list
查看>>
匿名方法和Lambda表达式
查看>>
京东的核心业务
查看>>
读书笔记(六)--成交
查看>>
Secret Number hdu 2113
查看>>
软件架构(体系结构,Architecture)和软件框架
查看>>