设计模式—生成器模式(建造者模式)
生活随笔
收集整理的這篇文章主要介紹了
设计模式—生成器模式(建造者模式)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
生成器模式是一種創建型設計模式,它把對象的創建步驟抽象成生成器,并且可以通過指導類(director)對所有生成步驟的先后順序進行控制。客戶端使用指導類并傳入相應的生成器,通過指導類的接口便可以得到相應的對象。
以我的理解看,生成器模式中的生成器被用來對生成對象的每一個步驟自身進行控制,比如要產生一輛汽車(最終對象),那么玻璃是用普通玻璃還是防彈玻璃(生成最終對象的一個步驟)。而指導類主要用來設置各個步驟之間的次序與取舍,比如先安裝門還是先安裝玻璃,要不要安裝座墊加熱。
生成器模式與抽象工廠模式看起來很像,其實有很多不同。首先抽象工廠模式更注重于“系列”,即要創建的產品族分為不同的系列,同一系列中的產品是固定的,創建的步驟也是固定的。而生成器模式的重點在于對創建過程中每一個步驟的精細控制以及步驟間次序的控制,這些在抽象工廠模式中是不方便進行控制的(甚至需要修改或創建新的工廠抽象類)。
下面以一輛汽車的生產為例。
首先是汽車類:
interface CarPlan {void setWheel(String wheel);void setFrame(String frame);void setEngine(String engine);void setWidget(String widget); }class Car implements CarPlan {private String myWheel;private String myFrame;private String myEngine;private String myWidget;void setWheel(String wheel) {myWheel = wheel;}void setFrame(String frame) {myFrame = frame;}void setEngine(String engine) {myEngine = engine;}void setWidget(String widget) {myWidget = widgetl} }然后創建生成器:
interface Builder {void buildWheel();void buildFrame();void buildEngine();void buildWidget();Car getCar(); } //一個廉價車生成器 class CheapBuilder implements Builder {Car cheapCar = new Car();Car getCar() {return cheapCar;}void buildWheel() {cheapCar.setWheel("cheap wheel");}void buildFrame() {cheapCar.setFrame("cheap frame");}void buildEngine() {cheapCar.setEngine("cheap engine");}void buildWidget() {cheapCar.setWidget("no widget");} } //一個平價車生成器 class EconomicBuilder implements Builder {Car economicCar = new Car();Car getCar() {return economicCar;}void buildWheel() {cheapCar.setWheel("cheap wheel");}void buildFrame() {cheapCar.setFrame("expensive frame");}void buildEngine() {cheapCar.setEngine("cheap engine");}void buildWidget() {cheapCar.setWidget("economic widget");} }創建指導類:
class Director {private Builder builder;director(Builder bld) {builder = bld;}void produceCar() {//這里對步驟進行控制builder.buildFrame();builder.buildWidget();builder.buildWheel();builder.buildEngine();}Car getCar() {builder.getCar();} }客戶端使用:
public class Test {public static void main(String[] args) {Builder bld = new EconomicBuilder();Director director = new Director(bld);director.produceCar();Car car = director.getCar(); }總結
以上是生活随笔為你收集整理的设计模式—生成器模式(建造者模式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: F2FS源码分析-1.1 [F2FS 元
- 下一篇: 我的世界高亮显示服务器,waila(我的