工厂模式(二)--工厂方法模式

来源:互联网 发布:电梯仿真软件 编辑:程序博客网 时间:2024/05/09 18:07

工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法就是让类把实例化推迟到子类。

工厂方法模式与简单工厂模式的区别:
两者都实现了类的实例化与类的行为之间的解耦。如果需要添加需求,对于简单工厂来说需要修改工厂中的代码。未遵循开闭原则(对拓展开放,对修改关闭),工厂方法模式只需要写个类实现工厂接口,遵循开闭原则。

类图:
这里写图片描述

场景:
手机实例化(Phone)是需要手机工厂(PhoneFactory)来生产的,手机(Phone)需要有打电话(call())的功能,实现一个ICall接口。现在有2款手机,一款iPhone,一款小米,现在让我们用工厂方法模式怎么实现代码

手机(Phone)需要打电话功能,需要实现ICall接口

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

手机工厂(PhoneFactory),创建手机(createPhone() 返回手机实例(Phone))

public interface PhoneFactory {    Phone createPhone();}

现在有2款手机:iPhone和小米

public class IPhone extends Phone {    @Override    public void call() {        Log.e("zhang", "我用iPhone手机打电话");    }}public class XiaoMiPhone extends Phone {    @Override    public void call() {        Log.e("zhang", "我用小米手机打电话");    }}

我们现在需要创建2个工厂去生产手机了

public class IPhoneFactory implements PhoneFactory {    @Override    public Phone createPhone() {        return new IPhone();    }}public class XiaoMiFactory implements PhoneFactory{    @Override    public Phone createPhone() {        return new XiaoMiPhone();    }}

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        new IPhoneFactory().createPhone().call();        new XiaoMiFactory().createPhone().call();    }}
0 0