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结构图
![简单工厂UML结构图](https://i-blog.csdnimg.cn/blog_migrate/8bed49017054294683f49eeff31d375a.png)
1.1 Code-工厂
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;
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结构图
![工厂方法UML结构图](https://i-blog.csdnimg.cn/blog_migrate/685f541236859b82c41963f00449646c.png)
2.1 Code-工厂
public interface PhoneFactory {
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;
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结构图
![抽象工厂UML结构图](https://i-blog.csdnimg.cn/blog_migrate/9a9eb64ce2a3275db0c93eece2c0200d.png)
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;
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;
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;
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;
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();
}
}