首页 > 作文

Java 深入理解创建型设计模式之抽象工厂模式

更新时间:2023-04-05 01:16:56 阅读: 评论:0

1.什么是抽象工厂模式?

抽象工厂模式: 定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类。抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合。从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象)。将工厂抽象成两层,absfactory(抽象工厂))和具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展。

我们仍然以上一货物运输从业资格证篇文章的案例为主,画出抽象工厂模式下的类图。

2.案例代码

首先仍然是pizza种类相关的几个类。

package com.szh.factory.abstractfactory.pizza; /** * 声明pizza类为抽象类 */public abstract class pizza {    //pizza名称    protected string name;     //准备原材料,不同的披萨不一样。因此,我们做成抽象方法,具体的原材料实现交给它的子类去完成    public abstract void prepare();     //烘烤    public void bake() {        system.out.println(name + " baking;");    }     //切割    public void cut() {        system.out.println(name + " cutting;");    }     //打包    public void box() {        system.out.println(name + " boxing;");    }     public void tname(string name) {        this.name = name;    }}
package com.szh.factory.abstractfactory.pizza; public class ldpep作文网 小学三年级perpizza extends pizza { @overridepublic void prepare() {tname("伦敦的胡椒pizza");system.out.println("伦敦的胡椒pizza 准备原材料");} }
package com.szh.factory.abstractfactory.pizza; public class ldcheepizza extends pizza { @overridepublic void prepare() {tname("伦敦的奶酪pizza");system.out.println("伦敦的奶酪pizza 准备原材料");} }
package com.szh.factory.abstractfactory.pizza; public class bjpepperpizza extends pizza { @overridepublic void prepare() {tname("北京的胡椒pizza");system.out.println("北京的胡椒pizza 准备原材绿豆对肝脏的好处料");} }
package com.szh.factory.abstractfactory.pizza; public class bjcheepizza extends pizza { @overridepublic void prepare() {tname("北京的奶酪pizza");system.out.println("北京的奶酪pizza 准备原材料");} }

下面是抽象工厂和工厂方法的区别之处。

package com.szh.factory.abstractfactory.order; import com.szh.factory.abstractfactory.pizza.pizza; //一个抽象工厂模式的抽象层(接口)public interface absfactory {    //让下面的工厂子类来具体实现    public pizza createpizza(string ordertype);}
package com.szh.abstractfactory.order; import com.szh.abstractfactory.pizza.bjcheepizza;import com.szh.abstractfactory.pizza.bjpepperpizza;import com.szh.abstractfactory.pizza.pizza; public class bjfactory implements absfactory {    @override    public pizza createpizza(string ordertype) {        pizza pizza = null;        if("chee".equals(ordertype)) {            pizza = new bjcheepizza();        } el if ("pepper".equals(ordertype)){            pizza = new bjpepperpizza();        }        return pizza;    }}
package com.szh.abstractfactory.order; import com.szh.abstractfactory.pizza.ldcheepizza;import com.szh.abstractfactory.pizza.ldpepperpizza;import com.szh.abstractfactory.pizza.pizza; public class ldfactory implements absfactory {    @override    public pizza createpizza(string ordertype) {        pizza pizza = null;        if ("chee".equals(ordertype)) {            pizza = new ldcheepizza();        } el if ("pepper".equals(ordertype)) {            pizza = new ldpepperpizza();        }        return pizza;    }}
package com.szh.factory.abstractfactory.order; import com.szh.factory.abstractfactory.pizza.pizza; import java.util.scanner; public class orderpizza {     absfactory absfactory;     public orderpizza(absfactory absfactory) {        tfactory(absfactory);    }     private void tfactory(absfactory absfactory) {        pizza pizza = null;        string ordertype = ""; // 用户输入        this.absfactory = absfactory;        do {            ordertype = gettype();            // factory 可能是北京的工厂子类,也可能是伦敦的工厂子类            pizza = absfactory.createpizza(ordertype);            if (pizza != null) { // 订购ok                pizza.prepare();                pizza.bake();                pizza.cut();                pizza.box();            } el {                system.out.println("订购失败");                break;            }        } while (true);    }     // 写一个方法,可以获取客户希望订购的披萨种类    private string gettype() {        scanner scanner = new scanner(system.in);        system.out.println("请输入 pizza 种类: ");        string str = scanner.nextline();        return str;    }}

最后是测试类。

package com.szh.abstractfactory; import com.szh.abstractfactory.order.bjfactory;import com.szh.abstractfactory.order.ldfactory;import com.szh.abstractf我一言难尽忍不住伤心是什么歌actory.order.orderpizza; import java.util.scanner; public class maintest {    public static void main(string[] args) {        scanner scanner = new scanner(system.in);        string content = scanner.next();        if ("beijing".equals(content)) {            new orderpizza(new bjfactory());        } el if ("london".equals(content)) {         山东水利职业学院   new orderpizza(new ldfactory());        } el {            system.out.println("无法预先匹配pizza种类....");            scanner.clo();        }    }}

3.工厂方法 + 抽象工厂总结

工厂模式的意义:将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦。从而提高项目的扩展和维护性。遵循了依赖倒转原则:创建对象实例时,不要直接new类,而是把这个new类的动作放在一个工厂的方法中,并返回。有的书上说,变量不要直接持有具体类的引用。 不要让类继承具体类,而是继承抽象类或者是实现interface(接口)不要覆盖基类中已经实现的方法。

到此这篇关于java 深入理解创建型设计模式之抽象工厂模式的文章就介绍到这了,更多相关java 抽象工厂模式内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-05 01:16:55,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/7f7862d7714a6ed9c1c2d6ea01e1657c.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Java 深入理解创建型设计模式之抽象工厂模式.doc

本文 PDF 下载地址:Java 深入理解创建型设计模式之抽象工厂模式.pdf

上一篇:粗苯的成分
下一篇:返回列表
标签:工厂   抽象   模式   子类
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图