简单工厂模式

学习Spring,上课做的笔记。

简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

import java.util.List;
/**
 * 学生类,里面有一个老师类集合,学生类有听课和问问题的两个方法
 * 这两个方法需要调用不同老师的相应方法,这里用了一个老师接口集合的成员变量。
 * 接口有三种表现形式:成员变量、形参、返回类型
 * @author Administrator
 *
 */
public class Student {
    private List<ITeacher> teachers;
    public void listen(){
        for(ITeacher teacher:teachers){
            teacher.teach();
        }
    }
    public void ask(){
        for(ITeacher teacher:teachers){
            teacher.answer();
        }
    }
    public List<ITeacher> getTeachers() {
        return teachers;
    }
    public void setTeachers(List<ITeacher> teachers) {
        this.teachers = teachers;
    }    
}


/**
 * 老师类接口
 * @author Administrator
 *
 */
public interface ITeacher {
    public void teach();
    public void answer();
}


/**
 * 实现老师接口的Java老师
 * @author Administrator
 *
 */
public class JavaTeacher implements ITeacher{

    @Override
    public void teach(){

     System.out.println("Java课");
    }
    @Override
    public void answer(){
    }
}


/**
 * 实现老师接口的艺术老师
 * @author Administrator
 *
 */
public class ArtTeacher implements ITeacher {

    @Override
    public void teach(){
        System.out.println("艺术课");
    }
    @Override
    public void answer(){
    }
}



/**
 * 简单工厂模式,又称静态工厂方法
 * equalsIgnoreCase忽略大小写
 * 如果不匹配,抛出异常,否则有很大的风险
 *
 * 以下是一个生产老师的工厂
 * 可以理解成登录验证
 * @author Administrator
 *
 */
public class TeacherFactory {

    public static ITeacher productTeacher(String type) throws Exception{
        if("math".equalsIgnoreCase(type)){
            return new MathTeacher();
        }else if("art".equalsIgnoreCase(type)){
            return new ArtTeacher();
        }else if("java".equalsIgnoreCase(type)){
            return new JavaTeacher();
        }else if("tea".equalsIgnoreCase(type)){
            return new Teacher();
        }
        throw new Exception("对不起,没有该类型的老师");
    }
}


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>


    <!-- 在Spring中的配置 -->
    <bean id="teacher" class="com.njaccp.dao.Teacher"></bean>
    <bean id="artTeacher" class="com.njaccp.dao.ArtTeacher"></bean>
    <bean id="stu" class="com.njaccp.dao.Student">
        <property name="teachers">
            <list>
                <ref local="teacher" />
                <ref local="artTeacher" />
            </list>
        </property>
    </bean>
</beans>




/**
 * 简单工厂模式测试
 */
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.njaccp.dao.ITeacher;
import com.njaccp.dao.Student;
import com.njaccp.dao.TeacherFactory;

public class StudentTest {

    @Test
    public void testListen() {
        Student student = new Student();
        List<ITeacher> teachers = new ArrayList<ITeacher>();
        ITeacher teacher = null;
        ITeacher teacher2 = null;
        try {
            teacher = TeacherFactory.productTeacher("art");
            teacher2 = TeacherFactory.productTeacher("tea");
        } catch (Exception e) {
            e.printStackTrace();
        }
        teachers.add(teacher);
        teachers.add(teacher2);
        student.setTeachers(teachers);
        student.listen();
    }
}


注意这里使用的是Junit测试,需要导入jar包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python简单工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,而无需直接暴露对象的创建逻辑。简单工厂模式通过一个工厂类来封装对象的创建过程,客户端只需要通过工厂类来获取所需的对象,而无需关心对象的具体创建细节。 在Python中,实现简单工厂模式通常包括以下几个步骤: 1. 定义一个抽象基类或接口,用于表示所要创建的对象的共同特征。 2. 创建具体的产品类,它们实现了抽象基类或接口,并提供了具体的功能实现。 3. 创建一个工厂类,该类包含一个静态方法或类方法,用于根据客户端的需求创建具体的产品对象。 4. 客户端通过调用工厂类的方法来获取所需的产品对象。 下面是一个简单的Python简单工厂模式的示例: ```python from abc import ABC, abstractmethod # 定义抽象基类 class Product(ABC): @abstractmethod def operation(self): pass # 具体产品类A class ConcreteProductA(Product): def operation(self): return "ConcreteProductA operation" # 具体产品类B class ConcreteProductB(Product): def operation(self): return "ConcreteProductB operation" # 工厂类 class SimpleFactory: @staticmethod def create_product(product_type): if product_type == "A": return ConcreteProductA() elif product_type == "B": return ConcreteProductB() else: raise ValueError("Invalid product type") # 客户端代码 product_a = SimpleFactory.create_product("A") print(product_a.operation()) # 输出:ConcreteProductA operation product_b = SimpleFactory.create_product("B") print(product_b.operation()) # 输出:ConcreteProductB operation ``` 在上述示例中,抽象基类`Product`定义了产品的共同特征,具体产品类`ConcreteProductA`和`ConcreteProductB`分别实现了抽象基类,并提供了具体的功能实现。工厂类`SimpleFactory`包含一个静态方法`create_product`,根据客户端传入的产品类型来创建具体的产品对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值