<small id="sqcay"></small>
<div id="sqcay"><wbr id="sqcay"></wbr></div>
<div id="sqcay"><wbr id="sqcay"></wbr></div>

全網整合營銷服務商

電腦端+手機端+微信端=數據同步管理

免費咨詢熱線:15805121342

Java設計模式之工廠模式

發布時間:2020-03-15 22:53 作者:蘇州永泰網絡公司

  工廠模式

  工廠模式定義:**任何可以產生對象的方法或類,都可以稱之為工廠。**所以單例也是一種工廠。

  工廠模式把原來new對象的方式,換成了用工廠來實現。為什么有了new之后,還要有工廠?是為了靈活控制生產過程,還可以控制對象訪問權限,給對象添加修飾和日志等。

  工廠系列的設計模式有:

  簡單工廠

  靜態工廠

  工廠方法

  抽象工廠

  舉例:用面向對象多態的方式,實現任意定制交通工具。

  public interface Moveable { void go();}public class Plane implement Moveable { public void go() { System.out.println("plane flying shuashua....."); }}public class Car implement Moveable { public void go() { System.out.println("Car go wuwuwuwuwu....."); }}public class Broom implement Moveable { public void go() { System.out.println("Broom flying chuachua....."); }}public class Main { public static void main(String[] args) { Moveable m = new Plane(); m.go(); }}

  以上小程序中,plane、car、broom都實現了Moveable接口,當我想換一種工具,只要換一個對象就好了,不需要重新new對象了。

  簡單工廠

  當我們new一個交通工具的時候,如果有控制權限的要求,而每個對象的權限是不一樣的。飛機有飛機的權限,汽車有汽車的權限。這時候用簡單的面向對象的方式就不合適了。這時候就要用工廠,讓產生對象的過程不用new,交給工廠處理。因為工廠可以靈活的控制生產過程,定制權限、修飾、日志。

  舉例:簡單工廠

  //交通工具工廠public class SimpleVehicleFactory { public Car createCar() { //before processing 前置處理 return new Car(); } public Broom createBroom() { //before processing 前置處理 return new Broom(); } public Plane createPlane() { //before processing 前置處理 return new Plane(); }}

  簡單工廠的可擴展性不好,每當我們添加一種交通工具,都要重新寫一個方法,方法里面的東西都要重寫。

  工廠方法

  我們可以針對每一種產品來做一個工廠。這種方法叫工廠方法。

  舉例:工廠方法,實現任意定制生產過程。

  public class CarFactory { public Car create() { System.out.println("a car created!"); return new Car(); }}public class Main { public static void main(String[] args) { Moveable m = new CarFactory().create(); m.go(); }}

  針對汽車,做一個汽車工廠,在里面添加new汽車的方法,以及new汽車的權限和日志等。當需要汽車時,只需要調用工廠的方法。當有很多種交通工具,每種交通工具都做一個工廠。

  抽象工廠

  上面介紹了用工廠模式任意定制交通工具和任意定制生產過程,工廠模式還可以任意定制產品一族。

  汽車、AK47、wdm(味多美) 是一個族:現代族

  public class Car { public void go() { System.out.println("Car go wuwuwuwuwu....."); }}public class AK47 { public void shoot() { System.out.println("tutututu....."); }}public class Bread { public void printName() { System.out.println("wdm"); }}public static void main(String[] args) { Car c = new Car(); c.go(); AK47 w = new AK47(); w.shoot(); Bread b = new Bread(); b.printName();}

  笤帚、魔法棒、dmg(毒蘑菇)是一族:魔法族

  public class Broom { public void go() { System.out.println("Broom flying chuachua....."); }}public class MagicStick { public void shoot() { System.out.println("diandain....."); }}public class MushRoom { public void printName() { System.out.println("dmg"); }}public static void main(String[] args) { Broom b = new Broom(); b.go(); MagicStick m = new MagicStick(); m.shoot(); MushRoom r = new MushRoom(); r.printName();}

  現在我們已經定義好了兩個產品族,現代族和魔法族。但是每當我想換一個族,都要改很多代碼。如果我想再添加一個產品族的時候,不需要添加很多代碼,也不要修改很多地方。這是要用到抽象工廠。

  舉例:抽象工廠,實現任意定制產品一族

  //抽象工廠public abstract class AbstracFactory { //這個抽象的工廠,會生產3個抽象的產品 abstract Food createFood(); abstract Vehicle createVehicle(); abstract Weapon createWeapon();}public abstract class Food { abstract void printName();}public abstract class Weapon { abstract void shoot();}public abstract class Vehicle { abstract void go();}//現代工廠,繼承抽象工廠,生產現代族的產品public class ModernFactory extends AbstractFactory { @Override Food createFood() { return new Bread(); } @Override Food createVehicle() { return new Car(); } @Override Food createWeapon() { return new AK47(); }}//魔法工廠,繼承抽象工廠,生產魔法族的產品 public class MagicFactory extends AbstractFactory { @Override Food createFood() {return new MushRoom(); } @Override Food createVehicle() {return new Broom(); } @Override Food createWeapon() {return new MagicStick(); }}public static void main(String[] args) { AbstractFactory f = new ModernFactory(); Vehicle c = f.createVehicle(); c.go(); Weapon w = f.createWeapon(); w.shoot(); Food b = f.createFood(); b.printName();}

  另外汽車和笤帚繼承Vehicle,AK47和魔法棒繼承Weapon,wdm和dmg繼承Food。代碼簡單就我不寫了。

  抽象工廠的結構是:

  抽象工廠(AbstracFactory)可以生產Vehicle、Weapon、Food這三個抽象的東西。

  具體工廠 繼承抽象工廠(AbstracFactory),具體工廠生產具體的東西,汽車、AK47等,這些東西都是從抽象工廠生產的抽象的東西繼承。

  

您的項目需求

*請認真填寫需求信息,我們會在24小時內與您取得聯系。

日韩AV片无码一区二区