工厂模式与建造者模式

工厂模式

核心本质:用工厂方法代替new操作,创建对象
目的是使得客户与尽可能少的类打交道
创建型模式

简单工厂模式例子
一个接口:

public interface Car {
    void run();
}

两个实现类:

public class Audi implements Car{
    @Override
    public void run() {
        System.out.println("奥迪发动");
    }
}
public class Jeep implements Car {
    @Override
    public void run() {
        System.out.println("jeep发动");
    }
}

一个工厂类:(工厂类与接口和具体实现类打交道)

public class CarFactory {
    public static Car createAudiCar(){
         return new Audi();
        }

    public static Car createJeepCar(){
        return new Jeep();
    }
 }

最后客户端只需要与接口和工厂类就能创建具体对象:

public class Client {
    public static void main(String[] args) {
        Car c1=CarFactory.createAudiCar();
       c1.run();
    }
}

简单工厂模式不符合开闭原则,可以给每个汽车都建一个汽车工厂类,但是这样的弊端是类的数量多。

抽象工厂模式,,将一系列的产品族统一到一起创建。

建造者模式

构造一个类的实例通常使用构造函数模式,以及java bean模式(set,get方法 )。 第一种当要调用一个类的构造函数时,首先要决定使用哪一个,若构造函数内参数过多容易混乱。 第二种方式在构建过程中对象的状态容易发生变化。

建造者模式实例:

public class Computer {
    private String cpu;//必选组件
    private String ram;//必选组件
    private int usbCount;//可选组件
    private String keyboard;//可选组件
    private String display;//可选组件

    private Computer(Builder builder){
        this.cpu=builder.cpu;
        this.ram=builder.ram;
        this.usbCount=builder.usbCount;
        this.keyboard=builder.keyboard;
        this.display=builder.display;
    }
    public static class Builder{
        private String cpu;//必须
        private String ram;//必须
        private int usbCount;//可选
        private String keyboard;//可选
        private String display;//可选

        public Builder(String cup,String ram){
            this.cpu=cup;
            this.ram=ram;
        }

        public Builder setUsbCount(int usbCount) {
            this.usbCount = usbCount;
            return this;
        }
        public Builder setKeyboard(String keyboard) {
            this.keyboard = keyboard;
            return this;
        }
        public Builder setDisplay(String display) {
            this.display = display;
            return this;
        }        
        public Computer build(){
            return new Computer(this);
        }
    }
}

最后在客户端使用链式调用(组装),一步一步的把对象构建出来,实现了除第一个Builder方法以外,其他方法可调用可不调用

Computer computer=new Computer.Builder("因特尔","三星")
                .setDisplay("三星24寸")
                .setKeyboard("罗技")
                .setUsbCount(2)
                .build();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值