设计模式 --- 工厂方法模式

1.定义

一定一个创建对象的接口,让子类决定实例化哪个类。

 

2.使用场景

在任何需要生成复杂对象的地方,都可以使用工厂方法模式。

 

3.简单实现

以一个汽车组装为例,汽车厂主要以组装一款SUV车型,比如Q3、Q5、Q7,对于这类车型内部差异并不大,除了基本功能以外,还提供了自动巡航,无人驾驶之类的功能。

//产品的抽象类
abstract class Car{

    //汽车行驶的方法
    public abstract void drive();
    //自动巡航的方法
    public abstract void selfNavigation();
}

//Q3车型
class Q3 extends Car{

    @Override
    public void drive() {
        System.out.println("Q3 启动");
    }

    @Override
    public void selfNavigation() {
        System.out.println("Q3 自动巡航");
    }
}

//Q5车型
class Q5 extends Car{

    @Override
    public void drive() {
        System.out.println("Q5 启动");
    }

    @Override
    public void selfNavigation() {
        System.out.println("Q5 自动巡航");
    }
}

//Q7车型
class Q7 extends Car{

    @Override
    public void drive() {
        System.out.println("Q7 启动");
    }

    @Override
    public void selfNavigation() {
        System.out.println("Q5 自动巡航");
    }
}

//抽象工厂
abstract class CarFactory{
    //T 对应具体型号
    abstract <T extends Car> T createCat(Class<T> clz);
}

//具体的汽车生产线
class MyCarFactory extends CarFactory{

    @Override
    <T extends Car> T createCat(Class<T> clz) {
        Car car = null;
        try {
            car =(Car) Class.forName(clz.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (T)car;
    }
}

public class FactoryMode {

    public static void main(String[] arg){
        //创建汽车制造的工厂对象
        MyCarFactory factory  = new MyCarFactory();

        //生产Q3
        Q3 q3 = factory.createCat(Q3.class);
        q3.drive();
        q3.selfNavigation();

        //生产Q5
        Q5 q5 = factory.createCat(Q5.class);
        q5.drive();
        q5.selfNavigation();

        //生产Q7
        Q7 q7 = factory.createCat(Q7.class);
        q7.drive();
        q7.selfNavigation();

    }
}

4.小结

优点:降低了对象的耦合度,而且工厂模式是依赖于抽象的架构,实现交由子类去完成,具有很好的拓展性。

缺点:每次添加一个产品就要添加一个产品类,还要引入抽象层,导致类的结构复杂化。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值