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

工厂模式的好处:
通过工厂模式可以将产品的实例化封装起来,调用者不需要关心产品的实例化过程,方便了当开发者对产品的实例化进行修改时,不需让调用者参与。

抽象产品类:

public abstract class Product {
    public abstract void color();
}

具体产品类A:

public class ConcretePrductA extends Product{
    @Override
    public void color() {
        System.out.println("红色");
    }
}

具体产品类B:

public class ConcretePrductB extends Product{
    @Override
    public void color() {
        System.out.println("绿色");
    }
}

抽象工厂类

public abstract class Factory {
    public abstract <T extends Product> T createProduct(Class<T> clz);
}

具体工厂类

public class ConcreteFactory extends Factory{
    @Override
    public <T extends Product> T createProduct(Class<T> clz) {
        Product p = null;
        try{
            p = (Product) Class.forName(clz.getName()).newInstance();
        }catch (Exception e){
            e.printStackTrace();
        }
        return (T)p;
    }
}

上述代码我们通过利用反射来更简洁的生产具体产品对象,只需要在工厂方法的参数列表中传入一个Class类就可以决定究竟是要哪一个产品。

调用方式:

Factory factory = new ConcreteFactory();
Product p = factory.createProduct(ConcretePrductA.class);
p.color();

除了该种方法还可以通过创建多个具体工厂来生产具体产品,即多工厂方法模式。

public class ConcreteFactoryA extends Factory{
    @Override
    public Product createProduct() {
        return new ConcretePrductA();
    }
}
public class ConcreteFactoryB extends Factory{
    @Override
    public Product createProduct() {
        return new ConcretePrductB();
    }
}
Factory factoryA = new ConcreteFactoryA();
Product pA = factoryA.createProduct();
pA.color();
Factory factoryB = new ConcreteFactoryB();
Product pB = factoryB.createProduct();
pB.color();

另外如果确定只需一个工厂类,可以写为:

public class Factory{
    public <T extends Product> T createProduct(Class<T> clz) {
        Product p = null;
        try{
            p = (Product) Class.forName(clz.getName()).newInstance();
        }catch (Exception e){
            e.printStackTrace();
        }
        return (T)p;
    }
}

该种方法即为简单工厂模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值