昨天看了一下設計模式,複習了一下簡單工廠模式,做個筆記,淺淡一下我對簡單工廠模式的理解。書上使用的是C#,因為我所學的是Java,所以本人就用Java實現了一遍。如果有講的不對的地方,希望能夠指出來。簡單工廠設計模式可以簡單地理解為,你拿著一個空口袋去水果店買水果,你把空袋子給水果店老闆,然後對老闆 ...
昨天看了一下設計模式,複習了一下簡單工廠模式,做個筆記,淺淡一下我對簡單工廠模式的理解。書上使用的是C#,因為我所學的是Java,所以本人就用Java實現了一遍。如果有講的不對的地方,希望能夠指出來。簡單工廠設計模式可以簡單地理解為,你拿著一個空口袋去水果店買水果,你把空袋子給水果店老闆,然後對老闆講我需要一袋子的柚子,十分鐘以後。老闆遞給你一袋子柚子。你不需要知道他們是怎麼區分柚子和橘子,又是怎麼把柚子裝進袋子的。你只需要知道你去了水果店,告訴他你需要一袋柚子。
代碼可以簡單理解為,水果店,水果和柚子三部分。如果不談用戶交互界面的話,能和你直接接觸的是水果店,下麵這段代碼可以理解為水果店,用來創造水果的。你可以告訴他你需要什麼樣的水果,他會返回你一袋水果。
public class FruitsFactory { public static Fruit createFruit(String name){ Fruit fruit = null; switch(name){ case "柚子": fruit = new Grapefruit(); break; case "橘子": fruit = new Tangerine(); break; } return fruit; } }
下麵這個類是一個抽象類,可以理解為水果的總稱,水果店裡面的所有的水果的混合。
public abstract class Fruit { protected double weight; public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } public abstract void getResult(); }
下麵就是具體的水果,抽象類的具體實現。
public class Grapefruit extends Fruit { private double price=5.5; @Override public void getResult() { System.out.println("一袋柚子的價錢是:"+(weight*price)); } }
public class Tangerine extends Fruit { private double price=3.5; public void getResult() { System.out.println("一袋橘子的價錢是:"+(weight*price)); } }
簡單工廠模式可以分為這樣幾部分,他最大的好處可以理解為,如果水果店裡新進檸檬,你只需要新建一個檸檬類,然後在水果店的switch裡面增加分支就夠了,不用去修改其他代碼。是不是感覺代碼之間的關聯度少了很多?這樣才能更利於代碼的後期維護。