工厂模式

参考资料:
RUNOOB.COM http://www.runoob.com/design-pattern/

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
应用实例:
1.Hibernate换数据库只需要换方言和驱动。
优点:
1.调用者创建对象,只需要知道名称
2.屏蔽了产品的实现,调用者只关心接口
3.Java中的JDBC

Connection conn=DriverManager.getConnection(“jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=DB;user=sa;password=”);
Statement statement=conn.createStatement();
ResultSet rs=statement.executeQuery(“select * from UserInfo”);

使用场景:
1.日志记录器,记录可能记录到本地硬盘、系统事件、远程服务器等。
2.数据库访问
3.设计一个服务器连接的框架

步骤:
1.创建接口
2.创建实现接口的实体
3.创建一个工厂,生成给定信息的实体类的对象
4.使用该工厂,通过传递类型信息来获取实体类的对象

参考上述链接写的示例代码如下:
Animal接口

public interface Animal {
    void speak();
}

实现接口的Cat 、Dog、Wolf

public class Cat implements Animal{
    @Override
    public void speak() {
        System.out.println("mew");
    }
}
public class Dog implements Animal{

    @Override
    public void speak() {
        System.out.println("bark");
    }
}
public class Wolf implements Animal{
    @Override
    public void speak() {
        System.out.println("howl");
    }
}

工厂类:

public class AnimalFactory {
    public Animal getAnimal(String animalName){
        if(animalName == null)
            return null;
        if(animalName.equals("CAT"))
            return new Cat();
        if(animalName.equals("DOG"))
            return new Dog();
        if(animalName.equals("WOLF"))
            return new Wolf();
        return null;
    }
}

使用示例:

public class AnimalFactoryDemo {
    public static void main(String[] args) {
            // TODO Auto-generated method stub
        AnimalFactory animalFactory = new AnimalFactory();
        Animal cat = animalFactory.getAnimal("CAT");
        cat.speak();
        Animal dog = animalFactory.getAnimal("DOG");
        dog.speak();
        Animal wolf = animalFactory.getAnimal("WOLF");
        wolf.speak();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值