設計模式-簡單工廠 --工廠模式--抽象模式
阿新 • • 發佈:2017-07-30
產品 cto .cn actor eth 分享 col http override
1 、簡單工廠模式
package com.bjsxt.factory.simplefactory; public interface Car { void run(); }
package com.bjsxt.factory.simplefactory; public class Audi implements Car { @Override public void run() { System.out.println("奧迪再跑!"); } }
package com.bjsxt.factory.simplefactory;public class Byd implements Car { @Override public void run() { System.out.println("比亞迪再跑!"); } }
package com.bjsxt.factory.simplefactory; public class CarFactory { public static Car createCar(String type){ if("奧迪".equals(type)){ return new Audi(); }else if("比亞迪".equals(type)){ return new Byd(); }else{ return null; } } }
調用者:如何沒有使用工廠模式
package com.bjsxt.factory.simplefactory; /** * 測試在沒有工廠模式的情況下 * @author 尚學堂高淇 www.sxt.cn * */ public class Client01 { //調用者 public static void main(String[] args) { Car c1= new Audi(); Car c2 = new Byd(); c1.run(); c2.run(); } }
如果使用簡單工廠模式:
package com.bjsxt.factory.simplefactory; /** * 簡單工廠情況下 * @author 尚學堂高淇 www.sxt.cn * */ public class Client02 { //調用者 public static void main(String[] args) { Car c1 =CarFactory.createCar("奧迪"); Car c2 = CarFactory.createCar("比亞迪"); c1.run(); c2.run(); } }
簡單工廠的缺點:
下面我們來看工廠模式:
我們首先定義了工廠抽象類的接口:
package com.bjsxt.factory.factorymethod; public interface CarFactory { Car createCar(); }
package com.bjsxt.factory.factorymethod; public class AudiFactory implements CarFactory { @Override public Car createCar() { return new Audi(); } }
package com.bjsxt.factory.factorymethod; public class BenzFactory implements CarFactory { @Override public Car createCar() { return new Benz(); } }
package com.bjsxt.factory.factorymethod; public class BydFactory implements CarFactory { @Override public Car createCar() { return new Byd(); } }
package com.bjsxt.factory.factorymethod; public class Client { public static void main(String[] args) { Car c1 = new AudiFactory().createCar(); Car c2 = new BydFactory().createCar(); c1.run(); c2.run(); } }
抽象工廠模式:
比如一個汽車的一個產品族:包括汽車發動機、汽車座椅 汽車 輪胎
package com.bjsxt.factory.abstractFactory; public interface CarFactory { Engine createEngine(); Seat createSeat(); Tyre createTyre(); }
package com.bjsxt.factory.abstractFactory; public interface Engine { void run(); void start(); } class LuxuryEngine implements Engine{ @Override public void run() { System.out.println("轉的快!"); } @Override public void start() { System.out.println("啟動快!可以自動啟停!"); } } class LowEngine implements Engine{ @Override public void run() { System.out.println("轉的慢!"); } @Override public void start() { System.out.println("啟動慢!"); } }
package com.bjsxt.factory.abstractFactory; public interface Seat { void massage(); } class LuxurySeat implements Seat { @Override public void massage() { System.out.println("可以自動按摩!"); } } class LowSeat implements Seat { @Override public void massage() { System.out.println("不能按摩!"); } }
package com.bjsxt.factory.abstractFactory; public interface Tyre { void revolve(); } class LuxuryTyre implements Tyre { @Override public void revolve() { System.out.println("旋轉不磨損!"); } } class LowTyre implements Tyre { @Override public void revolve() { System.out.println("旋轉磨損快!"); } }
package com.bjsxt.factory.abstractFactory; public class LowCarFactory implements CarFactory { @Override public Engine createEngine() { return new LowEngine(); } @Override public Seat createSeat() { return new LowSeat(); } @Override public Tyre createTyre() { return new LowTyre(); } }
package com.bjsxt.factory.abstractFactory; public class LuxuryCarFactory implements CarFactory { @Override public Engine createEngine() { return new LuxuryEngine(); } @Override public Seat createSeat() { return new LuxurySeat(); } @Override public Tyre createTyre() { return new LuxuryTyre(); } }
package com.bjsxt.factory.abstractFactory; public class Client { public static void main(String[] args) { CarFactory factory = new LuxuryCarFactory(); Engine e = factory.createEngine(); e.run(); e.start(); } }
一個高端的汽車由高端發動機、高端座椅、高端輪胎構成
設計模式-簡單工廠 --工廠模式--抽象模式