当前位置: 首页 > 图灵资讯 > 技术篇> GoF工厂模式之简单工厂模式

GoF工厂模式之简单工厂模式

来源:图灵教育
时间:2023-06-05 09:30:17

1.设计模式:40

设计模式是一种可重复使用的解决方案。

●GoF(GangofFour),中文名-四人组。

●《DesignPatterns:ElementsofReusableObject-OrientedSoftware》(即《设计模式》一书),1995年,ErichGamama、RichardHelm、RalphJohnson与JohnVlissides合并。这些作者经常被称为“四人组”(GangofFour)"。

●这本书描述了23种设计模式。我们通常所说的设计模式是指这23种设计模式。

●但除GoF23设计模式外,还有JavaEE设计模式(DAO模式、MVC模式等)。

2.GoF23设计模式可分为402.1创建型(5)三类:解决对象创建的问题。

■单例模式

■工厂方法模式

■抽象工厂模式

■建造者模式

■原型模式

2.2结构型(7):一些类或对象组合在一起的经典结构。

■代理模式

■装饰模式

■适配器模式

■组合模式

■享元模式

■外观模式

■桥接模式

2.3行为型(11):解决类或对象之间的互动问题。

■策略模式

■模板方法模式

■责任链模式

■观察者模式

■迭代子模式

■命令模式

■备忘录模式

■状态模式

■访问者模式

■中介者模式

■解释器模式

●工厂模式是为了解决对象创建的问题,因此工厂模式属于创建设计模式。为什么要在这里学习工厂模式?这是因为Spring框架底部使用了大量的工厂模式。

403.1工厂模式通常有三种形式:

●第一种:工厂模式简单(SimpleFactory):不属于23种设计模式之一。工厂模式简单又叫做:静态工厂方法模式。工厂模式简单是工厂方法模式的一种特殊实现。

●二是工厂方法模式(FactoryMethod):是23种设计模式之一。

●第三种:抽象工厂模式(AbstractFactory):是23种设计模式之一。

4.简单的工厂模式40

1.简单的工厂模式是工厂方法模式的特殊实现,又称静态工厂方法模式。span>

4.1简单的工厂模式解决了哪些问题?41

优点:客户端程序不需要关心对象的创建细节,需要哪个对象,只需要向工厂要求,初步实现责任的分离。

客户只负责“消费”,工厂负责“生产”。分离生产和消费。

4.2简单的工厂模式有三个角色:41

●抽象产品角色

●具体的产品角色

●工厂类角色

简单工厂模式的代码如下:

抽象产品角色:com.powernode.simple.factory抽象Weapon

package com.powernode.simple.factory;///抽象///抽象产品角色  41public abstract class Weapon {    /**     * 所有武器都可以攻击。     */    public abstract void attack();}

具体产品角色com.powernode.simple.factoryTank

package com.powernode.simple.factory;/** * 具体的产品角色  41 **/public class Tank extends Weapon{    @Override    public void attack() {        System.out.println("坦克开枪!!!!");    }}

Fighter

package com.powernode.simple.factory;/** * 具体的产品角色  41 **/public class Fighter extends Weapon{    @Override    public void attack() {        System.out.println(”战斗机离开了小男孩!!!!!");    }}

Dagger

package com.powernode.simple.factory;/** * 具体的产品角色  41 **/public class Dagger extends Weapon{    @Override    public void attack() {        System.out.println("砍丫!!!!");    }}

工厂角色com.powernode.simple.factoryWeaponFactory

package com.powernode.simple.factory;/** * 工厂类角色  41 **/public class WeaponFactory {    /**     * 静态方法。获得什么产品?这取决于你传输的参数,传输TANK获取坦克,传输DAGGER获取匕首,传输FIGHTER获取战斗机     * 在简单的工厂模式中有一种静态方法,因此被称为静态工厂模式。     * @param weaponType     * @return     */    public static Weapon get(String weaponType){        if ("TANK".equals(weaponType)) {            return new Tank();        } else if ("DAGGER".equals(weaponType)) {            return new Dagger();        } else if ("FIGHTER".equals(weaponType)) {            return new Fighter();        } else {            throw new RuntimeException(“不支持武器的生产”);        }    }}

测试com.powernode.simple.factoryTest

package com.powernode.simple.factory;/** * 这是客户端程序 测试的41 **/public class Test {    public static void main(String[] args) {        // 需要坦克        // 对于我的客户端,我不需要关心坦克的生产细节。我只需要向工厂索要。        // 什么是简单的工厂模式?        // 什么是简单的工厂模式?职责分离。客户不需要关心产品的生产细节。        // 客户端只负责消费。工厂负责生产。一个负责生产,一个负责消费。生产者与消费者分离。这就是简单工厂模式的作用。        Weapon tank = WeaponFactory.get("TANK");        tank.attack();        // 需要匕首        Weapon dagger = WeaponFactory.get("DAGGER");        dagger.attack();        // 需要战斗机        Weapon fighter = WeaponFactory.get("FIGHTER");        fighter.attack();    }}

GoF工厂模式之简单工厂模式_设计模式

4.3简单工厂模式的缺点?41

缺点一:假设需要扩展新产品,需要修改WeaponFactory工厂代码,这显然违反了OCP原则。

缺点二:工厂责任重大,不能有问题,因为这个工厂负责所有产品的生产,叫全能,或者有人称之为上帝。

一旦这个工厂出了问题,整个系统就会瘫痪。(不要把所有的鸡蛋都放在篮子里。)