建造者模式
什么是建造者模式呢,顾名思义,把某个货色创立进去,说得精确点是,把各种部件依照须要的形式建造成一个产品。建造者模式须要四个类,形象建造者,具体建造者,产品类,导演类。
产品类:
public class Phone { //手机的部件 private String cpu; private String screen; private String camera; //对部件的逻辑解决 public void setCpu(String cpu) { this.cpu = cpu; } public void setScreen(String screen) { this.screen = screen; } public void setCamera(String camera) { this.camera = camera; } public String use() { return "Phone{" + "cpu='" + cpu + '\'' + ", screen=" + screen + ", camera=" + camera + '}'; } }
形象建造者类:
public abstract class AbstractBuilder { //多个部件供咱们组合成不同的产品 public abstract void midCpu(); public abstract void midScreen(); public abstract void midCamera(); public abstract void topCpu(); public abstract void topScreen(); public abstract void topCamera(); //组合实现后返回产品类 public abstract Phone buildPhone();}
具体建造者类:
留神并不是具体的产品,而是具体的厂商,生产不同品牌部件的建造者,在本例中有两个具体建造者类,一个是生产一加的各部件,一个是生产魅族的各部件。
public class OnePlusBuilder extends AbstractBuilder { Phone phone = new Phone(); @Override public void midCpu() { phone.setCpu("一加高配处理器"); } @Override public void midScreen() { phone.setScreen("一加高配屏幕"); } @Override public void midCamera() { phone.setCamera("一加高配相机"); } @Override public void topCpu() { phone.setCpu("一加顶配处理器"); } @Override public void topScreen() { phone.setScreen("一加顶配屏幕"); } @Override public void topCamera() { phone.setCamera("一加顶配相机"); } @Override public Phone buildPhone() { return phone; }}
public class MeizuBuilder extends AbstractBuilder { Phone phone = new Phone(); @Override public void midCpu() { phone.setCpu("魅族中配处理器"); } @Override public void midScreen() { phone.setScreen("魅族中配屏幕"); } @Override public void midCamera() { phone.setCamera("魅族中配相机"); } @Override public void topCpu() { phone.setCpu("魅族高配处理器"); } @Override public void topScreen() { phone.setScreen("魅族高配屏幕"); } @Override public void topCamera() { phone.setCamera("魅族高配相机"); } @Override public Phone buildPhone() { return phone; }}
导演类:
导演嘛,很形象,指挥要建造什么具体的产品
public class Director { AbstractBuilder builder; public Director(AbstractBuilder builder) { this.builder = builder; } public Phone buildMidPhone() { builder.midCpu(); builder.midCamera(); builder.midScreen(); return builder.buildPhone(); } public Phone buildTopPhone() { builder.topCpu(); builder.topCamera(); builder.topScreen(); return builder.buildPhone(); }}
当初不是都说手机是堆料嘛,导演类就负责,我可能用不同的料,甚至同样的料不同的沉积办法来给你堆出不同的产品。
像下面的例子中,我有6个部件,然而不同的部件我可能生产不同的产品。
测试类:
public class Test { public static void main(String[] args) { Director director = new Director(new OnePlusBuilder()); System.out.println(director.buildMidPhone().use()); System.out.println(director.buildTopPhone().use()); director = new Director(new MeizuBuilder()); System.out.println(director.buildMidPhone().use()); System.out.println(director.buildTopPhone().use()); }}
与工厂模式的区别:
两者比拟类似,然而不同的点还是比拟清晰。
- 工厂模式重视的是个体,你要什么手机,我就生产一部手机进去给你,不必要关怀你外部的部件是怎么组合的,通常是一个办法生产一个产品。
- 建造者模式就不一样了,重视的是部件的组合,不同的部件组合能够生产进去不一样的产品,通常是几个办法的整合次啊能生产一个产品