欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

工厂方法模式

程序员文章站 2022-07-14 09:24:15
...

 转载请注明出处:https://blog.csdn.net/u011038298/article/details/84321202

/**
 * 抽象产品类
 */

public abstract class Product {

    // 产品ID
    public abstract int getId();

    // 产品名称
    public abstract String getName();

    // 产品的价格
    public abstract float getPrice();

    // 产品的品牌
    public abstract String getBrand();

    // 产品的生产日期
    public abstract long getProductionDate();

}

 

/**
 * 具体产品类:充电器
 */
public class Charger extends Product {

    @Override
    public int getId() {
        return 101;
    }

    @Override
    public String getName() {
        return "绿联 苹果手机充电器";
    }

    @Override
    public float getPrice() {
        return 59;
    }

    @Override
    public String getBrand() {
        return "绿联(UGREEN)";
    }

    @Override
    public long getProductionDate() {
        return 1416541835;
    }

}

 

/**
 * 具体产品类:电脑
 */
public class Computer extends Product {

    @Override
    public int getId() {
        return 102;
    }

    @Override
    public String getName() {
        return "联想扬天M4000e";
    }

    @Override
    public float getPrice() {
        return 3499;
    }

    @Override
    public String getBrand() {
        return "联想(Lenovo)";
    }


    @Override
    public long getProductionDate() {
        return 1445399435;
    }

}

 

/**
 * 具体产品类:电话
 */
public class Phone extends Product {

    @Override
    public int getId() {
        return 103;
    }

    @Override
    public String getName() {
        return "华为荣耀 V10";
    }

    @Override
    public float getPrice() {
        return 1998;
    }

    @Override
    public String getBrand() {
        return "华为(HUAWEI)";
    }

    @Override
    public long getProductionDate() {
        return 1512963635;
    }

}

 

/**
 * 抽象工厂类
 */

public abstract class AbstractFactory {

    // 创建产品:充电器
    public abstract Product createCharger();

    // 创建产品:电脑
    public abstract Product createComputer();

    // 创建产品:电话
    public abstract Product createPhone();

}

 

/**
 * 具体工厂类
 */

public class ConcreteFactory extends AbstractFactory {

    @Override
    public Product createCharger() {
        return new Charger();
    }

    @Override
    public Product createComputer() {
        return new Computer();
    }

    @Override
    public Product createPhone() {
        return new Phone();
    }
}

 

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /**
         * 工厂方法模式也是创建型模式,此模式的核心精神是封装类中不变的部分,
         * 提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。
         * 它的核心结构有四个角色:抽象产品、具体产品、抽象工厂、具体工厂。
         */
        AbstractFactory factory = new ConcreteFactory();
        Product product = factory.createCharger();
        product.getId();
        product.getName();
        product.getPrice();
        product.getBrand();
        product.getProductionDate();
    }

}