工厂模式
1、简单工厂
1.1
1.1.2 UML
1.2 代码
/**
* 电子产品类
*/
public interface Product {
void work();
}
/**
* 电脑
*/
public class Computer implements Product{
@Override
public void work() {
System.out.println("computer work...");
}
}
/**
* 手机
*/
public class Phone implements Product{
@Override
public void work() {
System.out.println("phone work...");
}
}
/**
* 简单工厂
*/
public class SimpleFactory {
public static Product createProduct(String name){
if("phone".equals(name)){
return new Phone();
}else if("computer".equals(name)){
return new Computer();
}
return null;
}
}
测试
public static void main(String[] args) {
Product product = SimpleFactory.createProduct("phone");
product.work();
Product computer = SimpleFactory.createProduct("computer");
computer.work();
}
结果
phone work...
computer work...
2 工厂方法
2.1
2.1.2 UML
2.2 代码
/**
* 电子产品类
*/
public interface Product {
void work();
}
/**
* 电脑
*/
public class Computer implements Product{
@Override
public void work() {
System.out.println("computer work...");
}
}
/**
* 手机
*/
public class Phone implements Product{
@Override
public void work() {
System.out.println("phone work...");
}
}
/**
* 电子产品工厂
*/
public interface IFactory {
Product getProduct();
}
/**
* 电脑工厂
*/
public class ComputerFactory implements IFactory {
@Override
public Product createProduct() {
return new Computer();
}
}
/**
* 手机工厂
*/
public class PhoneFactory implements IFactory {
@Override
public Product createProduct() {
return new Phone();
}
}
测试
public static void main(String[] args) {
new ComputerFactory().createProduct().work();
new PhoneFactory().createProduct().work();
}
结果
computer work...
phone work...
3、抽象工厂方法
3.1
3.1.2 UML
3.2 代码
/**
* 电脑接口
*/
public class Computer implements Product{
@Override
public void work() {
System.out.println("computer work...");
}
}
/**
* 苹果电脑
*/
public class AppleComputer implements IComputer{
@Override
public void work() {
System.out.println("apple computer work ...");
}
}
/**
* 联想电脑
*/
public class LenovoComputer implements IComputer{
@Override
public void work() {
System.out.println("lenovo computer work ...");
}
}
/**
* 手机接口
*/
public interface IPhone {
void work();
}
/**
* 苹果手机
*/
public class ApplePhone implements IPhone{
@Override
public void work() {
System.out.println("apple phone work ...");
}
}
/**
* 华为手机
*/
public class HWPhone implements IPhone{
@Override
public void work() {
System.out.println("huawei phone work ...");
}
}
工厂
/**
* 抽象工厂
*/
public interface IFactory {
/**
* 获取电脑
* @return
*/
IComputer getComputer();
/**
* 获取手机
* @return
*/
IPhone getPhone();
}
/**
* 华为工厂
*/
public class HWFactory implements IFactory{
@Override
public IComputer createComputer() {
throw new IllegalArgumentException("华为电脑信息未知...");
}
@Override
public IPhone createPhone() {
return new HWPhone();
}
}
/**
* 苹果工厂
*/
public class AppleFactory implements IFactory{
@Override
public IComputer createComputer() {
return new AppleComputer();
}
@Override
public IPhone createPhone() {
return new ApplePhone();
}
}
/**
* 联想工厂
*/
public class LenovoFactory implements IFactory{
@Override
public IComputer createComputer() {
return new LenovoComputer();
}
@Override
public IPhone createPhone() {
throw new IllegalArgumentException("联想手机信息未知...");
}
}
测试
public static void main(String[] args) {
IFactory appleFactory = new AppleFactory();
appleFactory.createComputer().work();
appleFactory.createPhone().work();
IFactory hwFactory = new HWFactory();
hwFactory.createPhone().work();
IFactory lenovoFactory = new LenovoFactory();
lenovoFactory.createComputer().work();
// lenovoFactory.createPhone().work();
// hwFactory.createComputer().work();
}
结果
apple computer work ...
apple phone work ...
huawei phone work ...
lenovo computer work ...