文章目錄
- 0. 簡單工廠、方法工廠通用Code
- 1. 簡單工廠
-
- 1.0 UML結構圖
- 1.1 Code-工廠
- 1.2 Test
- 2. 方法工廠(工廠方法)
-
- 2.0 UML結構圖
- 2.1 Code-工廠
- 2.2 Test
- 3. 抽象工廠
-
- 3.0 UML結構圖
- 3.1 Code-手機基礎元件類
- 3.2 Code-工廠
- 3.3 Test
0. 簡單工廠、方法工廠通用Code
public interface Phone {
void call();
}
public class Huawei implements Phone {
@Override
public void call() {
System.out.println("Huawei.call");
}
}
public class Samsung implements Phone {
@Override
public void call() {
System.out.println("Samsung.call");
}
}
1. 簡單工廠
1.0 UML結構圖
1.1 Code-工廠
/**
* 簡單工廠-手機的工廠
*
* @author ALion
* @version 2019/1/26 0:18
*/
public class PhoneFactory {
public static Phone create(String type) {
Phone phone = null;
switch (type) {
case "Samsung":
phone = new Samsung();
break;
case "Huawei":
phone = new Huawei();
default:
}
return phone;
}
}
1.2 Test
import com.skey.designpattern.factory.simple.PhoneFactory;
/**
* 測試-簡單工廠模式
*
* @author ALion
* @version 2019/1/26 0:13
*/
public class SimpleFactoryTest {
public static void main(String[] args) {
Phone samsung = PhoneFactory.create("Samsung");
Phone huawei = PhoneFactory.create("Huawei");
samsung.call();
huawei.call();
}
}
2. 方法工廠(工廠方法)
2.0 UML結構圖
2.1 Code-工廠
public interface PhoneFactory {
/**
* 建立手機對象
* @return 手機對象
*/
Phone create();
}
public class HuaweiFactory implements PhoneFactory {
@Override
public Phone create() {
return new Huawei();
}
}
public class SamsungFactory implements PhoneFactory {
@Override
public Phone create() {
return new Samsung();
}
}
2.2 Test
import com.skey.designpattern.factory.method.HuaweiFactory;
import com.skey.designpattern.factory.method.SamsungFactory;
/**
* 方法工廠測試
*
* @author ALion
* @version 2019/1/26 0:48
*/
public class MethodFactoryTest {
public static void main(String[] args) {
Phone huawei = new HuaweiFactory().create();
Phone samsung = new SamsungFactory().create();
huawei.call();
samsung.call();
}
}
3. 抽象工廠
3.0 UML結構圖
3.1 Code-手機基礎元件類
- CPU
public interface CPU {
void frequency();
void cores();
}
public class HighCPU implements CPU {
@Override
public void frequency() {
System.out.println("HighCPU.frequency = " + "3.0GHZ");
}
@Override
public void cores() {
System.out.println("HighCPU.cores = " + "8");
}
}
public class MediumCPU implements CPU {
@Override
public void frequency() {
System.out.println("MediumCPU.frequency = " + "2.0GHZ");
}
@Override
public void cores() {
System.out.println("MediumCPU.cores = " + "4");
}
}
public class LowCPU implements CPU {
@Override
public void frequency() {
System.out.println("LowCPU.frequency = " + "1.0GHZ");
}
@Override
public void cores() {
System.out.println("LowCPU.cores = " + "1");
}
}
- Memory
- Screen
3.2 Code-工廠
import com.skey.designpattern.factory.abstractfactory.cpu.CPU;
import com.skey.designpattern.factory.abstractfactory.memory.Memory;
import com.skey.designpattern.factory.abstractfactory.screen.Screen;
/**
* 手機工廠
*
* @author ALion
* @version 2019/1/26 1:29
*/
public interface PhoneFactory {
CPU createCPU();
Memory createMemory();
Screen createScreen();
}
import com.skey.designpattern.factory.abstractfactory.cpu.CPU;
import com.skey.designpattern.factory.abstractfactory.cpu.HighCPU;
import com.skey.designpattern.factory.abstractfactory.memory.HighMemory;
import com.skey.designpattern.factory.abstractfactory.memory.Memory;
import com.skey.designpattern.factory.abstractfactory.screen.HighScreen;
import com.skey.designpattern.factory.abstractfactory.screen.Screen;
/**
* 好手機的工廠
*
* @author ALion
* @version 2019/1/26 1:31
*/
public class GoodPhoneFactory implements PhoneFactory {
@Override
public CPU createCPU() {
return new HighCPU();
}
@Override
public Memory createMemory() {
return new HighMemory();
}
@Override
public Screen createScreen() {
return new HighScreen();
}
}
import com.skey.designpattern.factory.abstractfactory.cpu.CPU;
import com.skey.designpattern.factory.abstractfactory.cpu.HighCPU;
import com.skey.designpattern.factory.abstractfactory.cpu.LowCPU;
import com.skey.designpattern.factory.abstractfactory.memory.HighMemory;
import com.skey.designpattern.factory.abstractfactory.memory.LowMemory;
import com.skey.designpattern.factory.abstractfactory.memory.Memory;
import com.skey.designpattern.factory.abstractfactory.screen.HighScreen;
import com.skey.designpattern.factory.abstractfactory.screen.LowScreen;
import com.skey.designpattern.factory.abstractfactory.screen.Screen;
/**
* 壞手機的工廠
*
* @author ALion
* @version 2019/1/26 1:31
*/
public class BadPhoneFactory implements PhoneFactory {
@Override
public CPU createCPU() {
return new LowCPU();
}
@Override
public Memory createMemory() {
return new LowMemory();
}
@Override
public Screen createScreen() {
return new LowScreen();
}
}
3.3 Test
import com.skey.designpattern.factory.abstractfactory.BadPhoneFactory;
import com.skey.designpattern.factory.abstractfactory.GoodPhoneFactory;
import com.skey.designpattern.factory.abstractfactory.PhoneFactory;
import com.skey.designpattern.factory.abstractfactory.cpu.CPU;
import com.skey.designpattern.factory.abstractfactory.memory.Memory;
import com.skey.designpattern.factory.abstractfactory.screen.Screen;
/**
* 抽象工廠測試
*
* @author ALion
* @version 2019/1/26 1:34
*/
public class AbstractFactoryTest {
public static void main(String[] args) {
// 測試生産好手機
goodPhone();
// 測試生産壞手機
badPhone();
}
public static void goodPhone() {
System.out.println("AbstractFactoryTest.goodPhone ---> 好手機");
PhoneFactory factory = new GoodPhoneFactory();
show(factory);
}
public static void badPhone() {
System.out.println("AbstractFactoryTest.badPhone ---> 壞手機");
PhoneFactory factory = new BadPhoneFactory();
show(factory);
}
public static void show(PhoneFactory factory) {
CPU cpu = factory.createCPU();
cpu.frequency();
cpu.cores();
Memory memory = factory.createMemory();
memory.capacity();
memory.generation();
Screen screen = factory.createScreen();
screen.resolution();
screen.color();
}
}