设计模式-工厂模式

105 阅读2分钟

工厂模式

1、简单工厂

1.1

1.1.2 UML

image (4).png

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

image (3).png

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

image.png

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 ...