抽象工厂模式

抽象工厂模式的主要角色如下。

  1. 抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。

  2. 具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。

  3. 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。

  4. 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系

抽象工厂:

/**
 * 抽象工厂,电器工厂接口
 * */
public interface ApplianceFatory {
    /**
     * 生产电视机
     * */
    public Appliance makeTv();
    /**
     * 生产电冰箱
     * */
    public Appliance makeIce();

    /**
     * 生产手机
     * */
    public Appliance makePone();
}

具体工厂:

/**
 * 具体工厂,海尔电器工厂
 * */
public class HaierApplianceFatory extends AbstractApplianceFatory implements ApplianceFatory {

    @Override
    public Appliance makeTv() {
        return new HaierTv();
    }

    @Override
    public Appliance makeIce() {
        return new HaierIceBox();
    }

}

/**
 * 具体工厂,Tcl电器工厂
 * */
public class TclApplianceFactory implements ApplianceFatory{
    @Override
    public Appliance makeTv() {
        return new TclTv();
    }

    @Override
    public Appliance makeIce() {
        return new TclIceBox();
    }

    @Override
    public Appliance makePone() {
        return new TclPone();
    }
}

public abstract class AbstractApplianceFatory implements ApplianceFatory{
    @Override
    public Appliance makePone() {
        return null;
    }
}

抽象产品:

/**
 * 抽象产品,电器接口
 * */
public interface Appliance {
    public void show();


}

/**
 * 抽象产品,tcl电器类
 * */
public abstract class TclAppliance implements Appliance{
       public abstract void open();
}

/**
 * 抽象产品 ,海尔产品,海尔电器类
 * */
public abstract class HaierAppliance implements Appliance{


}

具体产品:

/**
 * 具体的产品,海尔电视机
 * */
public class HaierTv extends HaierAppliance implements Appliance{

    @Override
    public void show() {
        System.out.println("海尔电视机");
    }
}

/**
 * 具体产品,海尔电冰箱
 * */
public class HaierIceBox extends HaierAppliance implements Appliance{
    @Override
    public void show() {
        System.out.println("海尔电冰箱");
    }
}

/**
 * 具体的产品,海尔电视机
 * */
public class HaierTv extends HaierAppliance implements Appliance{

    @Override
    public void show() {
        System.out.println("海尔电视机");
    }
}

/**
 * 具体产品,Tcl电冰箱
 * */
public class TclIceBox extends TclAppliance implements Appliance{
    @Override
    public void show() {
        System.out.println("Tcl电冰箱");
    }

    @Override
    public void open() {
        System.out.println("我能打开冰箱");
    }
}

/**
* 具体产品,Tcl手机
* */
public class TclPone extends TclAppliance implements Appliance{

    @Override
    public void show() {
        System.out.println("我是手机");
    }

    @Override
    public void open() {
        System.out.println("手机我能开机");
    }

    public void open1(){
        System.out.println("我的手机能开机");
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        //海尔电器工厂
        HaierApplianceFatory haierApplianceFatory = new HaierApplianceFatory();
        //海尔电视机
        Appliance haiertv = haierApplianceFatory.makeTv();
        haiertv.show();
        //海尔电冰箱
        Appliance haierIceBox = haierApplianceFatory.makeIce();
        haierIceBox.show();

        //TclΠ电器工厂
        TclApplianceFactory tclApplianceFactory = new TclApplianceFactory();
        //tcl电视机
        Appliance tclTv = tclApplianceFactory.makeTv();
        tclTv.show();
        //tcl电冰箱
        Appliance tclIce = tclApplianceFactory.makeIce();
        tclIce.show();
        TclIceBox tclIceBox = (TclIceBox)tclIce;
        tclIceBox.open();

        Appliance pone  = tclApplianceFactory.makePone();
        pone.show();
        TclPone pone1 = (TclPone) pone;
        pone1.open1();

       /* TclPone tclPone = new TclPone();
        tclPone.open1();*/


    }
}

上一篇:Android CoordinatorLayout(五) 严重的卡顿BUG


下一篇:如何优雅地解决平台字体适应问题