写在前面:程序设计中常见的设计模式有23种,大致可以分为:创建型模式、结构型模式、行为型模式,见下图;
创建型模式:主要用于对象的创建;
结构型模式:用于处理类或者对象的组合;
行为型模式:用于描述类或对象怎样交互和分配职责;
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
现在开启我们的设计模式之旅。。。。
定义:简单工厂模式根据传入的参数不同,返回不同的对象,属于创建型设计模式;
模式分析:主要有三类角色:
1、Factory:工厂角色,专门用于创建实例类的工厂,该类提供一个方法,根据不同的参数返回不同的具体实例;
2、Product:抽象产品角色,所有具体实例的父类;
3、ConcreteProduct:具体产品角色,工厂真正生产的实例对象;
UML类图:
意义:简单工厂模式将对象的创建和对象本身的业务做了分离,降低了系统的耦合度,使得两者修改起来都相对容易一些;
优点:
1、实现了责任分割,提供了专门工厂类用于对象的创建;
2、客户端无需知道所创建类的具体名称和创建逻辑,只需要知道具体创建对象所对应的参数即可;
3、通过引入配置文件,可以在不修改任何客户端的代码的情况下,更换和增加具体的产品类,在一定程度上提高了系统的灵活性;
缺点:
1、工厂类集中了所有具体实例的创建逻辑,一旦不能正常工作,整个系统都会受到影响;
2、工厂模式会增加系统中类的个数,一定程度上增加了系统的复杂度和理解难度;
使用场景:
1、工厂类负责创建的对象比较少的时;
2、客户端只知道创建对象需要的参数,而不关心具体创建过程的时等;以下附demo源码:
===============================================================================================================================================
抽象产品类:package cn.com.pep.model.simpleFactory; /** * @Title: Pizza * @Description: 抽象产品角色 * @author wwh * @date 2022-8-22 14:18:25 */ public abstract class Pizza { /** * @Title: prepare * @Description: */ public abstract void prepare(); /** * @Title: bake * @Description: */ public abstract void bake(); /** * @Title: cut * @Description: */ public abstract void cut(); /** * @Title: box * @Description: */ public abstract void box(); }
具体产品类:
package cn.com.pep.model.simpleFactory; /** * @Title: CheesePizza * @Description: 具体产品角色 * @author wwh * @date 2022-8-22 14:22:53 */ public class CheesePizza extends Pizza{ @Override public void prepare() { System.err.println("prepare CheesePizza ..."); } @Override public void bake() { System.err.println("bake CheesePizza ..."); } @Override public void cut() { System.err.println("cut CheesePizza ..."); } @Override public void box() { System.err.println("box CheesePizza ..."); } }
package cn.com.pep.model.simpleFactory; /** * @Title: ChocalatePizza * @Description: 具体产品角色 * @author wwh * @date 2022-8-22 14:23:11 */ public class ChocolatePizza extends Pizza{ @Override public void prepare() { System.err.println("prepare ChocolatePizza ..."); } @Override public void bake() { System.err.println("bake ChocolatePizza ..."); } @Override public void cut() { System.err.println("cut ChocolatePizza ..."); } @Override public void box() { System.err.println("box ChocolatePizza ..."); } }
package cn.com.pep.model.simpleFactory; /** * @Title: VegetablePizza * @Description: 具体产品角色 * @author wwh * @date 2022-8-22 14:22:42 */ public class VegetablePizza extends Pizza { @Override public void prepare() { System.err.println("prepare VegetablePizza ..."); } @Override public void bake() { System.err.println("bake VegetablePizza ..."); } @Override public void cut() { System.err.println("cut VegetablePizza ..."); } @Override public void box() { System.err.println("box VegetablePizza ..."); } }
package cn.com.pep.model.simpleFactory; /** * @Title: SimplePizzaFactory * @Description: 工厂类 * @author wwh * @date 2022-8-22 14:19:03 */ public class SimplePizzaFactory { /** * @Title: createPizza * @Description: * @param type * @return */ public static Pizza createPizza(String type) { Pizza pizza = null; if ("cheese".equals(type)) { pizza = new CheesePizza(); } if ("vegetable".equals(type)) { pizza = new VegetablePizza(); } if ("chocalate".equals(type)) { pizza = new ChocolatePizza(); } return pizza; } }
package cn.com.pep.model.simpleFactory; /** * @Title: PizzaStore * @Description: * @author wwh * @date 2022-8-22 14:34:26 */ public class PizzaStore { /** * @Title: orderPizza * @Description: * @param type * @return */ public Pizza orderPizza(String type) { Pizza pizza = null; pizza = SimplePizzaFactory.createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } }
本文来自博客园,作者:一只烤鸭朝北走,仅用于技术学习,所有资源都来源于网络,部分是转发,部分是个人总结。欢迎共同学习和转载,转载请在醒目位置标明原文。如有侵权,请留言告知,及时撤除。转载请注明原文链接:https://www.cnblogs.com/wha6239/p/16627795.html