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

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

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

类图:
这里写图片描述

场景:
手机实例化(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();

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值