设计模式之工厂模式

工厂模式概念:
1.实力化对象,用工厂方法代替new操作
2.工厂模式包括工厂方法模式和抽象工厂模式
3.抽象工厂模式是工厂方法模式的扩展

工厂模式的意图:
1.定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化
2.工厂方法把实例化的工作推迟到子类中去实现

适合工厂模式的场景:
1.有一组类似的对象需要创建
2.在编码是不能预见需要创建那种类的实例
3.系统需要考虑扩展性,不应依赖于产品实例如何被创建、组合和表达细节。

工厂方法模式和抽象工厂模式对比
1.工厂模式是一种极端情况的抽象工厂模式,re抽象工厂模式可以看做工厂模式的推广
2.工厂模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的等级结构

3.工厂模式只是一个抽象产品类,二抽象工厂模式有多个产品抽象类


示例代码:

         1).首先创建产品接口

public interface HairInterface {
    void draw();
}
          2).实现产品接口

public class RedHair implements HairInterface {
    @Override
    public void draw() {
        System.out.println("this is the red hair");
    }
}

public class BlackHair implements HairInterface {
    @Override
    public void draw() {
        System.out.println("this black hair");
    }
}

         3).创建工厂

public class HairFactory {
    /*
    * 根据类的包名来生产对象
    * */
    public HairInterface getHairByClass(String className){
        try {
            HairInterface hair = (HairInterface) Class.forName(className).newInstance();
            return hair;
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
    public HairInterface getHairByClass(Class aClass){
        try {
            HairInterface hair = (HairInterface) aClass.newInstance();
            return hair;
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        return null;
    }
}

         4).主线程调用

  HairFactory factory = new HairFactory();
        HairInterface blackHair = factory.getHairByClass("mobi.futoubang.factory.BlackHair");
        blackHair.draw();


        HairInterface redHair = factory.getHairByClass(RedHair.class);
        redHair.draw();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值