设为首页 加入收藏

TOP

Spring(Bean详解)(一)
2023-07-25 21:34:22 】 浏览:89
Tags:Spring Bean 详解

GoF之工厂模式

GoF是指二十三种设计模式

GoF23种设计模式可分为三大类:

  • 创建型(5个):解决对象创建问题。

      • 单例模式

      • 工厂方法模式

      • 抽象工厂模式

      • 建造者模式

      • 原型模式

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

      • 代理模式

      • 装饰模式

      • 适配器模式

      • 组合模式

      • 享元模式

      • 外观模式

      • 桥接模式

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

      • 策略模式

      • 模板方法模式

      • 责任链模式

      • 观察者模式

      • 迭代子模式

      • 命令模式

      • 备忘录模式

      • 状态模式

      • 访问者模式

      • 中介者模式

      • 解释器模式

工厂模式是解决对象创建问题的,所以工厂模式属于创建型设计模式。这里为什么学习工厂模式呢?这是因为Spring框架底层使用了大量的工厂模式。

1.1工厂模式的三种形态

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

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

  • 工厂方法模式(Factory Method):是二十三种设计模式之一。

  • 抽象工厂模式(Abstract Factory):是二十三种设计模式之一。

1.2 简单工厂模式

简单工厂模式的角色包括三个:

  • 抽象产品:角色

  • 具体产品:角色

  • 工厂类:角色

代码如下:

抽象产品角色:

package com.powernode.factory;
?
/**
 * 武器(抽象产品角色)
 * @author 耀耀
 * @version 1.0
 * @className Weapon
 * @since 1.0
 **/
public abstract class Weapon {
    /**
     * 所有的武器都有攻击行为
     */
    public abstract void attack();
}

具体产品角色:

package com.powernode.factory;
?
/**
 * 坦克(具体产品角色)
 * @author 耀耀
 * @version 1.0
 * @className Tank
 * @since 1.0
 **/
public class Tank extends Weapon{
    @Override
    public void attack() {
        System.out.println("坦克开炮!");
    }
}
?
package com.powernode.factory;
?
/**
 * 战斗机(具体产品角色)
 * @author 耀耀
 * @version 1.0
 * @className Fighter
 * @since 1.0
 **/
public class Fighter extends Weapon{
    @Override
    public void attack() {
        System.out.println("战斗机投下原子弹!");
    }
}
?
package com.powernode.factory;
?
/**
 * 匕首(具体产品角色)
 * @author 耀耀
 * @version 1.0
 * @className Dagger
 * @since 1.0
 **/
public class Dagger extends Weapon{
    @Override
    public void attack() {
        System.out.println("砍他丫的!");
    }
}
?

工厂类角色:

package com.powernode.factory;
?
/**
 * 工厂类角色
 * @author 耀耀
 * @version 1.0
 * @className WeaponFactory
 * @since 1.0
 **/
public class WeaponFactory {
    /**
     * 根据不同的武器类型生产武器
     * @param weaponType 武器类型
     * @return 武器对象
     */
    public static Weapon get(String weaponType){
        if (weaponType == null || weaponType.trim().length() == 0) {
            return null;
        }
        Weapon weapon = null;
        if ("TANK".equals(weaponType)) {
            weapon = new Tank();
        } else if ("FIGHTER".equals(weaponType)) {
            weapon = new Fighter();
        } else if ("DAGGER".equals(weaponType)) {
            weapon = new Dagger();
        } else {
            throw new RuntimeException("不支持该武器!");
        }
        return weapon;
    }
}
?

测试程序(客户端程序):

package com.powernode.factory;
?
/**
 * @author 耀耀1
 * @version 1.0
 * @className Client
 * @since 1.0
 **/
public class Client {
    public static void main(String[] args) {
        Weapon weapon1 = WeaponFactory.get("TANK");
        weapon1.attack();
?
        Weapon weapon2 = WeaponFactory.get(&q
首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇java魔功心法-范型篇 下一篇动态规划篇——背包问题

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目