本系列持續更新,敬請關注。git
靜態工廠介紹:github
靜態工廠模式能夠實現接口封裝隔離的原則。在客戶端只知接口而不知實現的時候能夠使用靜態工廠模式。
源碼請點擊我設計模式
角色:ide
Product:客戶端須要使用的接口。 ConcreteProduct:Product的具體實現。 Factory:擁有靜態方法的工廠類,返回ConcreteProduct實例。 Client:只知到Product。可是並不知道具體實現。
UML:this
code:.net
package 設計模式.staticFactary; /* *2016年8月26日 上午10:15:22 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public interface Product { public void operation(); }
package 設計模式.staticFactary; /* *2016年8月26日 上午10:15:00 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class ConcreteProduct implements Product{ @Override public void operation() { System.out.println("我是具體產品中的實現方法"); } }
package 設計模式.staticFactary; /* *2016年8月26日 上午10:47:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class Factory { public static Product getProduct(){ return new ConcreteProduct(); } }
package 設計模式.staticFactary; /* *2016年8月26日 上午10:48:05 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class Client { public static void main(String[] args) { Product product=Factory.getProduct(); product.operation(); } }
AbstractFactory介紹:設計
AbstractFactory是爲一系列相關的或者相互依賴的類建立接口,客戶端不用關注他們的實現。至關如一個AbstractFactory的實現建立一個產品族。
AbstractFactory角色:code
abstractProduct:抽象產品類。 ConcreteProduct:具體的產品實現。 abstractFactory:抽象工廠。 ConcreteFactory:具體的工廠實現。
UML:
blog
場景:選用不一樣的方案來裝機,主要是讓cpu和主板配套。
code:
abstractProduct
package 設計模式.abstractFactory; /* *2016年9月2日 上午10:18:46 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public interface CpuAPI { public void calculate(); }
abstractProduct
package 設計模式.abstractFactory; /* *2016年9月2日 上午10:18:46 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public interface MainBoardAPI { void install(); }
ConcreteProduct
package 設計模式.abstractFactory; /* *2016年9月2日 上午10:20:38 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class IntellCpu implements CpuAPI{ Integer cpuPins; public IntellCpu(Integer pins) { cpuPins=pins; } @Override public void calculate() { System.out.println("Intell cpu 正在計算....."+"pins:"+cpuPins); } }
ConcreteProduct
package 設計模式.abstractFactory; /* *2016年9月2日 上午10:20:38 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class AMDCpu implements CpuAPI{ Integer cpuPins; public AMDCpu(Integer pins) { cpuPins=pins; } @Override public void calculate() { System.out.println("AMD cpu 正在計算....."+"pins:"+cpuPins); } }
package 設計模式.abstractFactory; /* *2016年9月2日 上午10:24:25 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ ConcreteProduct //技嘉主板 public class GigaMainboard implements MainBoardAPI{ //插入cpu的接口pin數 Integer pins ; public GigaMainboard(Integer pins) { this.pins=pins; } @Override public void install() { System.out.println("技嘉主板正在安裝.....pin數:"+pins); } }
ConcreteProduct
package 設計模式.abstractFactory; /* *2016年9月2日 上午10:24:25 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ //微星主板 public class MSIMainboard implements MainBoardAPI{ //插入cpu的接口pin數 Integer pins ; public MSIMainboard(Integer pins) { this.pins=pins; } @Override public void install() { System.out.println("微星主板正在安裝.....pin數:"+pins); } }
AbstractFactory
package 設計模式.abstractFactory; /* *2016年9月2日 上午10:29:07 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public interface AbstractFactory { CpuAPI createCPU(); MainBoardAPI createMainBoardAPI(); }
ConcreteFactory
package 設計模式.abstractFactory; /* *2016年9月2日 上午10:31:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class ConcreteFactoryA implements AbstractFactory{ @Override //intell cpu public CpuAPI createCPU() { return new IntellCpu(1156); } //技嘉主板 @Override public MainBoardAPI createMainBoardAPI() { return new GigaMainboard(1156); } }
ConcreteFactory
package 設計模式.abstractFactory; /* *2016年9月2日 上午10:31:01 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class ConcreteFactoryB implements AbstractFactory{ @Override //AMD cpu public CpuAPI createCPU() { return new AMDCpu(939); } //微星主板 @Override public MainBoardAPI createMainBoardAPI() { return new MSIMainboard(939); } }
Client
package 設計模式.abstractFactory; /* *2016年9月2日 上午10:39:15 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class Engineer { AbstractFactory schemal; public Engineer(AbstractFactory schemal) { this.schemal = schemal; } public void setSchemal(AbstractFactory schemal) { this.schemal = schemal; } public void makeAndUseComputer(){ CpuAPI cpu=schemal.createCPU(); MainBoardAPI mainBoard=schemal.createMainBoardAPI(); cpu.calculate(); mainBoard.install(); } }
package 設計模式.abstractFactory; import static org.junit.Assert.*; import java.nio.channels.NonWritableChannelException; import javax.swing.border.AbstractBorder; import org.junit.Test; /* *2016年9月2日 上午10:35:51 *@Author Pin-Wang *@E-mail 1228935432@qq.com */ public class Client { @Test public void test() { System.out.println("裝機方案A"); //裝機模式1 AbstractFactory schemalA=new ConcreteFactoryA(); Engineer engineer=new Engineer(schemalA); engineer.makeAndUseComputer(); System.out.println("裝機方案B"); //裝機模式2 AbstractFactory schemalB=new ConcreteFactoryB(); engineer.setSchemal(schemalB); engineer.makeAndUseComputer(); } }
output:
裝機方案A Intell cpu 正在計算.....pins:1156 技嘉主板正在安裝.....pin數:1156 裝機方案B AMD cpu 正在計算.....pins:939 微星主板正在安裝.....pin數:939
歡迎與廣大coder交流技術
QQ:1228935432
WX:WX1228935432