工厂模式(三)--抽象工厂模式

来源:互联网 发布:天津外国语大学 知乎 编辑:程序博客网 时间:2024/05/01 06:43

抽象工厂模式:当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

抽象工厂模式与工厂方法模式的区别:
工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。

类图:
这里写图片描述

场景:现在有2个产品,手机(Phone)和平板(Pad),我们需要一个工厂(IFactory)生产2中产品,现在有2个品牌小米,苹果都做这产品,并且有着自己的工厂。

代码:

产品的基类与实现的接口

public interface ICall {    void call();}public abstract class Phone implements ICall {}public interface IPlay {    void play();}public abstract class Pad implements IPlay {}

抽象工厂:

public interface IFactory {    Phone createPhone();    Pad createPad();}

小米产品:

public class XiaoMiPhone extends Phone {    @Override    public void call() {        Log.e("zhang", "用小米手机打电话" );    }}public class XiaoMiPad extends Pad {    @Override    public void play() {        Log.e("zhang", "用小米平板玩游戏" );    }}

小米的工厂:

public class XiaoMiFactory implements IFactory {    @Override    public Phone createPhone() {        return new XiaoMiPhone();    }    @Override    public Pad createPad() {        return new XiaoMiPad();    }}

苹果的产品

public class IPhone extends Phone {    @Override    public void call() {        Log.e("zhang", "用iPhone打电话" );    }}public class IPad extends Pad {    @Override    public void play() {        Log.e("zhang", "用iPad玩游戏" );    }}

苹果的工厂:

public class AppleFactory implements IFactory {    @Override    public Phone createPhone() {        return new IPhone();    }    @Override    public Pad createPad() {        return new IPad();    }}

程序入口:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        IFactory factory = new XiaoMiFactory();        operate(factory);        factory = new AppleFactory();        operate(factory);    }    public void operate(IFactory factory) {        Phone phone = factory.createPhone();        phone.call();        Pad pad = factory.createPad();        pad.play();    }}
0 0