最近在看設計模式,那麼簡單工廠模式是什麼呢?
簡單的例子來記錄下吧:
首先來兩個例子來簡單的說明吧:java
簡單的假設,咱們如今須要建立不少的實例,而且這些實例是有必定共性的。
簡單例子:如今咱們須要建立一個關於usb的設備,只要支持usb的設備咱們都須要將其建立出來,好比手機,電腦,相機不少不少種不一樣的設備,他們有一些共性(屬於電子產品,支持usb接口等)那麼咱們建立這些產品的實例的時候咱們會怎麼建立呢?設計模式
public static void main(String [] args){ //建立電腦實例 Computer comp = new Computer(); //建立手機實例 Phone p = new Phone(); //建立打印機實例 Printer prin = new Printer(); //建立鼠標實例 Mouse mouse = new Mouse(); }
在咱們建立的過程當中就會感受很是的臃腫,固然簡單工廠的設計模式並非僅僅只是解決這麼一個很是小的問題。iphone
咱們細細的想,這些產品它是有不少共性的,可是有些東西使他們特有的,那麼咱們能夠怎麼作?ide
這裏咱們就須要將這些具備共性的東西抽離出來造成一個父類(固然是要用到面向對象的思想的)學習
這樣作的好處?this
那麼下面就是簡單的代碼筆記:設計
下面這個例子:一個工廠生產出支持usb的電子產品,那麼有電腦和鼠標,簡單的例子code
/** * 這是簡單工廠模式的工廠類,主要是用來建立其餘電子產品的實例的 * @author lijunhong * */ public class ElectronFactory { USBElectron device = null;//這個是設備 public USBElectron creatDevice(String name){ switch (name) { case "computer": device = new Computer(name); break; case "mouse": device = new Mouse(name); break; default: break; } return device; } }
/** * 這是一個父類,將支持usb中的設備抽象出來 * @author lijunhong * */ public abstract class USBElectron { public abstract void function();//抽象出設備的功能 }
public class Computer extends USBElectron { private String name; public Computer(String name){ this.name = name; } public void function() { //這個方法是電腦的方法 System.out.println(this.name+":電腦能夠上網,聊天,學習"); } }
public class Mouse extends USBElectron { private String name; public Mouse(String name){ this.name = name; } @Override public void function() { //這個是鼠標的方法 System.out.println(this.name+":鼠標能夠打字"); } }
上面這幾個類簡單的構成了簡單工廠模式;
那麼如今開始運用這個簡單工廠模式生產產品對象
當一個客戶須要生產產品好比:一臺電腦或者一個鼠標亦或者其餘東西咱們均可以運用blog
public class FactoryMain { /** * @param args */ public static void main(String[] args) { //簡單工廠建立實例演示 //建立工廠 ElectronFactory factory = new ElectronFactory(); //建立電腦實例 USBElectron computer = factory.creatDevice("computer"); computer.function(); //建立鼠標實例 USBElectron mouse = factory.creatDevice("mouse"); mouse.function(); } }
例子:如今咱們須要作一個遊戲,這個遊戲中有不少怪物,不一樣種類的怪物,咱們根據遊戲的進展須要去除案件不一樣的怪物。(妖猴,狐狸精,狸貓,吸血鬼等)
下面就是離子的實現過程:
//這是一個怪物的抽象類(父類) public abstract class Monster { public abstract void skill();//怪物技能 public abstract void getName();//怪物名字 public abstract void eat();//怪物吃東西 }
public class Monkey extends Monster { public Monkey(){ } @Override public void skill() { System.out.println("猴子會使用金箍棒。"); } @Override public void getName() { System.out.println("猴子"); } @Override public void eat() { System.out.println("猴子吃桃子"); } public void life(){ System.out.println("猴子長身不老"); } }
public class Tanuki extends Monster { public Tanuki(){ } @Override public void skill() { System.out.println("狸貓的魅惑技能"); } @Override public void getName() { System.out.println("狸貓"); } @Override public void eat() { System.out.println("狸貓吃太子"); } }
public class Vampire extends Monster { public Vampire(){ } @Override public void skill() { System.out.println("吸血鬼吸血"); } @Override public void getName() { System.out.println("吸血鬼"); } @Override public void eat() { System.out.println("吸血鬼吸血"); } }
public class MonsterMain { public static MonsterFactory monsterfactory;//工廠 public static Monster monster; public static void main(String[] args) { //建立猴子實體對象 //建立喜歡血鬼 monster = MonsterFactory.creatMonster("吸血鬼"); monster.eat(); monster.getName(); monster.skill(); //建立狸貓 monster = monsterfactory.creatMonster("狸貓"); monster.eat(); monster.getName(); monster.skill(); //這裏轉型,從而能夠調用life方法 Monkey monster = (Monkey)monsterfactory.creatMonster("猴子"); monster.eat(); monster.skill(); monster.getName(); monster.life(); } }
記錄學習的每一步,記錄每一次的成長!!!!