什么是工厂模式(三种工厂模式)

工厂模式是我们开发中更常用的设计模式。工厂模式在spring framework中随处可见。工厂模式属于创建模式,是一种批量创建对象的模式。工厂模型分为工厂方法

工厂模式是我们开发中更常用的设计模式。工厂模式在spring framework中随处可见。工厂模式属于创建模式,是一种批量创建对象的模式。工厂模型分为工厂方法模式和抽象工厂。

简单工厂模式

1.工厂方法模式是一种工厂模型,工厂方法模式是一个工厂对象决定创建哪个产品类别的例子。

简单工厂模式定义了一个创建对象的类,它封装了实例化对象的代码。

在软件开发中,当我们使用大量对象来创建某类、某类或某批时,我们会选择工厂模式。也称为静态工厂模式。

这里介绍一个做披萨的例子。让我们演示一下工厂模型。

首先写一个PIZZA抽象类,prepare方法,每个都不一样,需要子类来实现。

公共抽象类Pizza { protected String name公共抽象void prepare();public void bake(){ system . out . println(name+& # 34;烘焙& # 34;);} public void cut(){ system . out . println(name+& # 34;切割;");} public void set name(String name){ this . name = name;} }公共类CheesePizza扩展Pizza { @ Override public void prepare(){ system . out . println(& # 34;制作奶酪披萨,准备原料& # 34;);}}public类GreekPizza扩展Pizza { @ Override public void prepare(){ system . out . println(& # 34;只给希腊披萨,准备原料& # 34;);} }公共类PepperPizza扩展Pizza { @ Override public void prepare(){ system . out . println(& # 34;只做辣椒披萨,准备好原料& # 34;);}}定义一个工厂类,创建不同口味的披萨。

公共类simple factory { public Pizza create Pizza(String order type){ Pizza Pizza = null;system . out . println(& # 34;使用简单工厂模式& # 34;);if(order type . equals(& # 34;希腊语& # 34;)){ pizza = new Greek pizza();pizza . set name(& # 34;希腊比萨饼& # 34;);} else if(order type . equals(& # 34;奶酪& # 34;)){ pizza = new cheese pizza();pizza . set name(& # 34;披萨& # 34;);} else if(order type . equals(& # 34;胡椒& # 34;)){ pizza = new pepper pizza();pizza . set name(& # 34;胡椒& # 34;);}退披萨;}}来电者

public class orders simpizza { simple factory simple factory;披萨披萨= nullpublic orders simpizza(simple factory factory){ setSimpleFactory(factory);} public void setsimple factory(simple factory simple factory){ String orderType = simple factory . get orderType();this . simple factory = simple factory;pizza = simple factory . create pizza(order type);如果(披萨!= null){ pizza . prepare();披萨.烘焙();披萨. cut();} else { system . out . println(& # 34;制造比萨饼失败了& # 34;);} } }主方法

public static void main(String[]args){ simple factory simple factory = new simple factory();simple factory . setordertype(& # 34;希腊语& # 34;);新订单SimPizza(简单工厂);}如果增加一个新的披萨,我只需要修改工厂类,实现了增加一个类别。

工厂方法模式

披萨项目的新需求,顾客在点餐时可以点不同口味的披萨,比如北京的芝士披萨,伦敦的芝士披萨。

如果使用简单工厂模式,则需要创建不同的工厂类,如BJPizzafactory、LDPizzaspamplefactory等。从目前的案例来看,也有可能。当时并不是特别好考虑项目的规模、可维护性、可扩展性。这时候可以考虑工厂方法模式。

所谓工厂方法模式,就是把一个对象的实例化功能抽象成一个抽象方法,由具体的子类实现。

工厂方法模式(Factory method pattern),定义了创建对象的抽象方法,确定了子类要实例化的类,并将对象的实例化延迟到子类。

1.定义一个包含抽象方法的抽象类。

公共类bjorderizza扩展order pizza { public bjorderizza(String order type){ super(order type);} @ Override public Pizza create Pizza(String order type){ Pizza Pizza = null;if(order type . equals(& # 34;奶酪& # 34;)){ pizza = new bjcheese pizza();} else if(order type . equals(& # 34;胡椒& # 34;)){ pizza = new bjpaperpizza();}退披萨;}}2.定义2个子类来继承这个抽象方法。

公共类ldorderspizza扩展order pizza { public ldorderspizza(String order type){ super(order type);} @ Override public Pizza create Pizza(String order type){ Pizza Pizza = null;if(order type . equals(& # 34;奶酪& # 34;)){ pizza = new LDCheesePizza();} else if(order type . equals(& # 34;胡椒& # 34;)){ pizza = new LDPapperPizza();}退披萨;}}public类border pizza扩展order pizza { public border pizza(String order type){ super(order type);} @ Override public Pizza create Pizza(String order type){ Pizza Pizza = null;if(order type . equals(& # 34;奶酪& # 34;)){ pizza = new bjcheese pizza();} else if(order type . equals(& # 34;胡椒& # 34;)){ pizza = new bjpaperpizza();}退披萨;}}定义一些要实现的具体类。

公共类BJCheesePizza扩展Pizza { @ Override public void prepare(){ system . out . println(& # 34;北京奶酪,准备原料& # 34;);} }公共类BJPapperPizza扩展Pizza { @ Override public void prepare(){ setName(& # 34;北京的胡椒披萨& # 34;);system . out . println(& # 34;北京胡椒披萨,准备原料& # 34;);} }公共类LDCheesePizza扩展Pizza { @ Override public void prepare(){ setName(& # 34;伦敦的奶酪披萨& # 34;);system . out . println(& # 34;伦敦的奶酪披萨正在准备中& # 34;);} }公共类LDPapperPizza扩展Pizza { @ Override public void prepare(){ setName(& # 34;伦敦的胡椒披萨& # 34;);system . out . println(& # 34;伦敦的胡椒披萨正在准备中& # 34;);}}抽象工厂1。抽象工厂,定义一个接口来创建相关或依赖的对象集群,而无需指定特定的类。

2.抽象工厂、工厂方法模式可以与工厂方法模型相结合。

3.从设计层面来说,抽象工厂是工厂方法模式的改进或进一步抽象。

4.抽象工厂,工厂被抽象成两层,AbsFactory和具体实现的子类。程序员可以根据创建的类型使用相应的工厂子类。这样可以把单一的简单工厂变成工厂集群,更有利于代码的维护和扩展。

什么是工厂模式(三种工厂模式)插图

代码的实现部分

1.创建一个抽象工厂的接口。

公共接口ABS factory { public Pizza create Pizza(String order type);}2.创建抽象工厂的实现类

公共类BJFactory实现ABS factory { @ Override public Pizza create Pizza(String orderType){ Pizza Pizza = null;if(order type . equals(& # 34;奶酪& # 34;)){ pizza = new bjcheese pizza();} else if(order type . equals(& # 34;胡椒& # 34;)){ pizza = new bjpaperpizza();}退披萨;} } @ override public Pizza create Pizza(String order type){ Pizza Pizza = null;if(order type . equals(& # 34;奶酪& # 34;)){ pizza = new LDCheesePizza();} else if(order type . equals(& # 34;胡椒& # 34;)){ pizza = new LDPapperPizza();}退披萨;}创建一个调用者,实现要创建的类。

公共类订单Pizza {私人AbsFactory私有字符串orderTypepublic void set factory(ABS factory factory){ this . factory = factory;} public ABS factory get factory(){ return factory;} public void setOrderType(String orderType){ this . orderType = orderType;披萨披萨= nullpizza = factory . create pizza(order type);如果(披萨!= null){ pizza . prepare();披萨.烘焙();披萨. cut();}}}主方法的入口

public static void main(String[] args) { OrderPizza orderPizza = new OrderPizza(); orderPizza.setFactory(new LDFactory()); orderPizza.setOrderType("cheese");}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/59410.html

发表回复

登录后才能评论