右下侧的FAQ➡
会让你快捷使用本站
关闭提示
Back End

工厂方法模式

PineappleCat · 2月5日 · 2021年 108次已读

简单工厂

package FactoryMethod;

/**
 * 简单工厂 编程习惯
 * 设计模式:稳中有变
 *
 * @author GoodTime0313
 * @version 1.0
 * @date 2021/2/5 11:22
 */
public class SimpleFactoryMethod {
    public static void main(String[] args) {
        Appliction appliction = new Appliction();
        Product object = appliction.getObject("0");
        object.method1();
    }
}

/*class ProductA {
    //稳定的部分
    public void method1() {
        System.out.println("ProductA.method1");
    }
}*/
interface Product {
    public void method1();
}

class ProductA implements Product {
    @Override
    public void method1() {
        System.out.println("ProductA.method1");
    }
}

class ProductA1 implements Product {
    @Override
    public void method1() {
        System.out.println("ProductA1.method1");
    }
}

//简单工厂 编程习惯
class SimpleFactory {
    public static Product createProduct(String type) {
        if (type.equals("0")) {
            return new ProductA();
        } else if (type.equals("1")) {
            return new ProductA1();
        } else {
            return null;
        }
    }
}

class Appliction {
    private Product createProduct(String type) {
        return SimpleFactory.createProduct(type);
    }

    Product getObject(String type) {
        Product product = createProduct(type);
        return product;
    }
}

工厂方法模式

package FactoryMethod;

/**
 * 工厂方法模式:将实例化过程推迟到子类
 * 设计模式:稳中有变
 * <p>
 * 开闭原则:增加修改并没有对稳定的代码进行修改,只是加入了新的逻辑
 * 单一职责原则:每一个实现都是独立的,不相互干扰
 *
 * @author GoodTime0313
 * @version 1.0
 * @date 2021/2/5 11:22
 */
public class FactoryMethod {
    public static void main(String[] args) {
        ConcreateProductorB productorB = new ConcreateProductorB();
        Product1 object = productorB.getObject();
        object.method1();
    }
}

interface Product1 {
    public void method1();
}

class ProductB implements Product1 {
    @Override
    public void method1() {
        System.out.println("ProductB.method1");
    }
}

class ProductB1 implements Product1 {
    @Override
    public void method1() {
        System.out.println("ProductB1.method1");
    }
}

//抽象出来稳定的代码
abstract class Appliction2 {
    abstract Product1 createProduct();

    Product1 getObject() {
        Product1 product = createProduct();
        return product;
    }
}

class ConcreateProductorB extends Appliction2 {
    @Override
    Product1 createProduct() {
        return new ProductB();
    }
}

class ConcreateProductorB1 extends Appliction2 {
    @Override
    Product1 createProduct() {
        return new ProductB1();
    }
}

Click here to view the copyright notice of this site(点击此处查看本站版权声明)
0 条回应