设计模式之工厂模式

废话不多说,直接上栗子;该模式的工厂分流程工厂和实例化对象工厂两部分:流程工厂定义在抽象类中;实例化对象工厂(工厂的本质)定义在扩展自抽象类的子类中。客户去创造一个实例时,选择哪一个子类,则就是创造了哪一个对象。

package jsoup;

/*工厂模式即抽象类提供一个可以创建对象的接口,创建实例的任务交给扩展该抽象类的子类;抽象类中的抽象方法叫做工厂方法;
      言而简之,创建实例的任务交给子类去实现
*/

public class FactoryPattern {
    public static void main(String[] args){
        CarFactory bwm = new BWM(); //BWM实例的引用对象类型是CarFactory,这样才能用process()
        bwm.process("small");
        bwm.process("large");
    }
}
//抽象的汽车工厂,其中的制造流程如车主体、轮子、门的制造是顺序流,并且不需要知道具体的汽车品牌;
abstract class CarFactory {

    public Car process(String  type){
        Car car = createCar(type);
        car.makeBody();
        car.makeWheel();
        car.makeDoor();
        return car;
    }
    protected abstract Car createCar(String type); //该抽象工厂方法交给扩展该类的子类去实现;
}

class BWM extends CarFactory {
    @Override
    protected Car createCar(String type) { //BWM子类扩展自汽车工厂,并实现了抽象的工厂方法createCar();
        Car car = null;
        if(type=="small"){
            car = new BWMSmallCar();
        }
        if(type == "large"){
            car = new BMWLargeCar();
        }
        return car;
    }
}

//Car的抽象类,一些不变的代码如车主体、轮子、门的构造已实现;
abstract class Car {
    String name;
    String type;
    protected void makeBody(){
        System.out.println(name +" and type " + type  + " body is maked");
    }
    protected void makeWheel(){
        System.out.println(name +" and type " + type  +" wheels are maked");
    }
    protected void makeDoor(){
        System.out.println(name +" and type " + type  +" doors are maked");
    }
    protected String getName(){
        return name;
    }
}

//一些宝马汽车公司的具体汽车类型,其扩展了抽象汽车类Car;
class BWMSmallCar extends Car {
    public BWMSmallCar(){
        name = "BWMSmallCar";
        type ="Small";
    }
}

class BMWLargeCar extends Car{
    public BMWLargeCar(){
        name = "BMWLargeCar";
        type = "Large";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frank Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值