1抠忘、工廠模式
當(dāng)用戶購買產(chǎn)品的時(shí)候杜秸,不想去一個(gè)一個(gè)的小作坊看產(chǎn)品(換做程序的角度就是new 一個(gè)一個(gè)的對(duì)象)解幼,用戶會(huì)選擇一個(gè)大的工廠去看抑党、選擇產(chǎn)品,這樣的產(chǎn)品才有質(zhì)量保證撵摆,工廠一般都有嚴(yán)格的生產(chǎn)標(biāo)準(zhǔn)底靠。
(1)簡(jiǎn)單工廠模式
用戶要去電腦城買配件,直接告訴工廠配件的名字特铝,工廠就把配件的對(duì)象new給用戶了暑中。
public class SimpleFactory {
public static ComputerPart getCar(String name){
if (name.equals("cpu")){
return new Cpu();
}else if (name.equals("mainboard")){
return new Mainboard();
}else if (name.equals("memory")){
return new Memory();
}else if (name.equals("videocard")){
return new VideoCard();
}else {
System.out.println("sorry, 沒有找到你要的配件");
return null;
}
}
}
Test
public class SimpleFactoryTest {
public static void main(String[] args) {
ComputerPart part = SimpleFactory.getCar("cpu");
if (part != null)
System.out.println(part.getPart());
}
}
(2)工廠方法模式
簡(jiǎn)單工廠模式對(duì)用戶來說是合適的,但對(duì)于一個(gè)工廠的管理鲫剿,卻是難以去維護(hù)的鳄逾,按照程序的角度,當(dāng)產(chǎn)品有成千上萬種灵莲,要一直一直去if else 判斷嗎雕凹?這樣代碼不僅臃腫,并且維護(hù)要定位哪一種產(chǎn)品的時(shí)候也是一種困難。
- intel廠家的cpu
public class IntelFactory {
public static ComputerPart getPart(){
return new Cpu();
}
}
- 金士頓的內(nèi)存
public class KingshidunFactory {
public static ComputerPart getPart(){
return new Memory();
}
}
- 華碩的主板和顯卡
public class HuaShuoFactory {
public static ComputerPart getMainboard(){
return new Mainboard();
}
public static ComputerPart getVideoCard(){
return new VideoCard();
}
}
Test
public class FuncFactoryTest {
public static void main(String[] args) {
ComputerPart part = HuaShuoFactory.getMainboard();
if (part != null)
System.out.println(part.getPart());
}
}
(3)枚抵、抽象工廠模式
按照方法工廠模式线欲,如果買電腦配件的用戶不是對(duì)廠家很熟悉,那不是得讓用戶抓狂汽摹,用戶心中肯定mmp:我就想買條內(nèi)存询筏,你居然還讓我自己選擇哪個(gè)廠家的,我還得去了解廠家竖慧。
AbstractFactory.java
public abstract class AbstractFactory {
public abstract ComputerPart getCpu();
public abstract ComputerPart getMainBoard();
public abstract ComputerPart getMemory();
public abstract ComputerPart getVideoCard();
}
DefaultFactory:店家可以很好管理哪些配件是哪些廠家的
public class DefaultFactory extends AbstractFactory{
public ComputerPart getCpu() {
return IntelFactory.getPart();
}
public ComputerPart getMainBoard() {
return HuaShuoFactory.getMainboard();
}
public ComputerPart getMemory() {
return KingshidunFactory.getPart();
}
public ComputerPart getVideoCard() {
return HuaShuoFactory.getVideoCard();
}
}
Test : 用戶不用去管配件是哪個(gè)廠家生產(chǎn)的,就直接通過店家說產(chǎn)品的名字就行逆屡。
public class AbstractFactoryTest {
public static void main(String[] args) {
DefaultFactory factory = new DefaultFactory();
ComputerPart part = factory.getMainBoard();
if (part != null)
System.out.println(part.getPart());
}
}