文章目录
- 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();
}
}