工厂模式
核心本质:用工厂方法代替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();