spring学习之工厂模式

1.设计模式是一套反复使用,多数人知晓,经过分类、代码设计的经验总结。

2.工厂模式的定义:为创建一组相关或者相互依赖的对象提供一个接口,而无需指定他们的具体实现类。

3.工厂模式的适用性

(1)有一组类似的对象需要创建;

(2)系统需要考虑扩展性

4.工厂模式的三个角色

(1)抽象产品(接口)

(2)具体产品(实现类)

(3)生产者(工厂类)

其中concreteProduct是具体产品,product是抽象产品,creator是生产者。

5.工厂模式的好处:

提供好的灵活性和代码复用性,代码仅仅依赖接口而不是实现类。但是代码复杂度会有所增加。

下面是一个完整的工厂模式代码片段

students类

public class Students {

    private String sid;
    private String name;
    private int age;

    public Students(String sid, String name, int age) {
        super();
        this.sid = sid;
        this.name = name;
        this.age = age;
    }
    public Students() {
        super();
    }
    public String getSid() {
        return sid;
    }
    public void setSid(String sid) {
        this.sid = sid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

users类

public class Users {

    private String uid;
    private String name;
    private String passwd;

    public Users(String uid, String name, String passwd) {
        super();
        this.uid = uid;
        this.name = name;
        this.passwd = passwd;
    }
    public Users() {
        super();
    }
    public String getUid() {
        return uid;
    }
    public void setUid(String uid) {
        this.uid = uid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPasswd() {
        return passwd;
    }
    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }
}

抽象接口

public interface BussinessDAO {

    //保存实体
    //保存任何一个对象,与参数无关
    public boolean save(Object obj);

}

具体实现类

public class StudentsDAOImpl implements BussinessDAO {

    @Override
    public boolean save(Object obj) {
        Students s=(Students)obj;
        System.out.println("学号"+s.getSid()+"姓名"+s.getAge());
        return true;
    }

}
public class UsersDAOImpl implements BussinessDAO{

    @Override
    public boolean save(Object obj) {
        Users u=(Users)obj;
        System.out.println("用户名:"+u.getName()+"密码:"+u.getPasswd());
        return true;
    }

}

工厂类

public class BussinessFactory {

    public static BussinessDAO getInstance(String className){
        if(className.equals("com.qzp.model.Students"))
        {
            return new StudentsDAOImpl();
        }
        else if(className.equals("com.qzp.model.Users"))
        {
            return new UsersDAOImpl();
        }
        else
        {
            return null;
        }
    }
}

测试方法

public class TestBussinessFactory extends TestCase{

    public void testGetInstance(){
        BussinessDAO dao=BussinessFactory.getInstance("com.qzp.model.Students");
        Students s=new Students();
        s.setAge(11);
        s.setName("qzp");
        s.setSid("001");
        dao.save(s);
    }
}
时间: 2024-10-26 07:40:33

spring学习之工厂模式的相关文章

设计模式学习02—工厂模式

1.动机与定义 我们在程序中使用一个对象时,需要new一下,如果需要设置其他值就再初始化一下.比如我要使用一个按钮,手动new一个矩形按钮,然后初始化一些值,如显示文字,背景色等. // 矩形按钮 IButton btn = new RecButton(); // 初始化其他值 btn.setText("提交"); btn.setBackgroundColor("#00aaff"); // 其他初始化省略 // 圆形按钮 IButton btn2 = new Rou

设计模式学习之--工厂模式

今天学习的设计模式是工厂模式.那么为什么叫它工厂模式呢?工厂模式,顾名思义就是用一个工厂生产各种东西,工厂模式是如何体现的呢? 首先,工厂模式有简单的工厂模式和抽象工厂模式两种,我们先用一个发型的工厂来演示一下简单的工厂模式: 一个发型接口:工厂模式是面向接口编程的,这样可以更易于程序的扩展 package com.sunny.project; /** * 发型接口 * @author Administrator * */ public interface HairInterface { /**

设计模式学习笔记-工厂模式

一.概述 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法(Factory Method)使一个类的实例化延迟到其子类: 2.模式中的角色 Product(Map):定义工厂方法所创建的对象的接口. ConcreteProduct(BaiduMap.GaodeMap):具体Product,实现Product接口. Creator(IMapFactory):声明工厂方法,该方法返回一个Product类型的对象. ConcreteCreator(BaiduMapFactory.Gaod

设计模式学习-简单工厂模式

1.什么是简单工厂模式 简单工厂模式属于类的创建模式,又叫做静态工厂模式,是通过专门建立一个类负责创建其他类的实例,被创建的类通常有着共同的父类,之所以称之为工厂,就是因为负责创建其他类的类能够根据传递参数的不同,产生不同的实例,使得程序满足松耦合.重用度高.易修改维护的特点. 2.简单工厂模式的实现 下面举例说明工厂模式,比如说我们要实现一个两个数的size运算,那么如何去设计能过做到我们上面说的特性.首先我们要设定一个运算的终极父类: #include <iostream> #includ

(@WhiteTaken)设计模式学习——抽象工厂模式

抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象. 下面直接上代码. 1.苹果需要实现水果的接口,而苹果可以有北方的苹果,也可以有南方的苹果,所以也可以抽象成一个父类. 1 public interface Fruit { 2 public void Get(); 3 } 4 5 public abstract class Apple implements Fruit{ 6 public abstract voi

《Head First 设计模式》学习笔记——工厂模式 + 抽象工厂模式

设计模式 工厂模式:定义一个创建对象的接口,但由子类决定要实例化的是哪一个.工厂方法让类把实例化推迟到子类. 所谓的"决定",并非指模式同意子类本身在执行时做决定,而是指在编写创建者类时.不须要知道实际创建的产品是哪一个. 选择了使用这个子类,就自然的决定了实际创建的产品是什么. 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族.而不须要指定详细类. 抽象工厂的任务时定义一个负责创建一组产品的接口.这个接口内的每一个产品都负责创建一个详细产品.使用工厂方法. 设计原则 (1)多

&lt;C/C++ 版&gt; 设计模式 学习之 工厂模式 &lt;1&gt;

大话设计模式这本书使用 C# 语言写的,我用的是 C++ 语言,最近在看这本书,所以用 C++ 语言走了一遍. 以下是部分笔记,包括代码 若不涉及面向对象这个概念,我们写的简易计算器可能是下面这个样子 //User.cpp --- 客户端 #include "iostream" int main() { using namespace std; cout<<"Input First Number : "; int number_a; cin>>

设计模式学习——简单工厂模式

模式概述:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,但其不属于23种GOF设计模式之一,通常它根据自变量的不同返回不同的类的实例.     UML类图: 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一个产品类的实例.由上图可以看出,简单工厂模式有工厂.抽象产品.具体产品三个角色. 工厂角色(Factory) 是

php设计模式学习之工厂模式

我的认为:所为工厂模式是事先有一系类class,一个工厂类' 工厂类根据不同的参数创建不同的对象,调用各自的方法; php利用工厂模式实现计算器: ?php /** * Created by PhpStorm. * User: modern * Date: 16-7-19 * Time: 下午5:24 * 简单工厂模式两数运算器 */ echo "hello factory models<br/>"; echo "begin<br/>"; i