java 设计模式-抽象工厂设计模式

*以下仅是本人学习之后的个人总结,有不足之处可以留言讨论。 

抽象工厂设计模式的特点:

  • 系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品。
  • 系统一次只可能消费其中某一族产品,即同族的产品一起使用。
  • 抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建;

优缺点:

  • 可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。
  • 当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。
  • 从抽象到具体的过程,易扩展;不需要修改原代码,满足开闭原则;

其缺点是:当产品族(抽象工厂)中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。

        先定义接口作为抽象工厂去定义有几个抽象类(例如:手机、电脑、键盘等)。

        定义不同产品族的接口去实现抽象工厂的接口(例如:小米手机工厂、小米电脑工厂等)。

 

 代码简单实现:

1.AbstrComputer抽象类:

public abstract class AbstrComputer {

    public static String name;

    private void shutup(){
        System.out.println("电脑开机");
    }

    private void shutdown(){
        System.out.println("电脑关机");
    }

    private void useComputer(){
        System.out.println("使用电脑");
    }

    abstract void methods();
}

2.AbstrPhone抽象类

public abstract class  AbstrPhone {

    public static String name;

    private void shutup(){
        System.out.println("手机开机");
    }

    private void shutdown(){
        System.out.println("手机关机");
    }

    private void usePhone(){
        System.out.println("使用手机");
    }

    abstract void methods();

}

 3.HuaWeiComputer类

public class HuaWeiComputer extends AbstrComputer {

    public  HuaWeiComputer (String name){
        HuaWeiComputer.name=name;
    }
    @Override
    void methods() {
        System.out.println("华为电脑特有功能");
    }
}

 4.HuaWeiFactory类

public class HuaWeiFactory  implements ProductFactory{
    @Override
    public  AbstrPhone getPhone() {
        System.out.println("==============华为手机=================");
        return new HuaWeiPhone("新华为手机");
    }

    @Override
    public  AbstrComputer getComputer() {
        System.out.println("==============华为电脑=================");
        return new HuaWeiComputer("新华为电脑");
    }
}

5.HuaWeiPhone类

public class HuaWeiPhone extends AbstrPhone{

    public HuaWeiPhone(String name){
        HuaWeiPhone.name=name;
    }

    @Override
    void methods() {
        System.out.println("华为手机特有功能");
    }
}

6.MiComputer类

public class MiComputer extends AbstrComputer{


    public MiComputer(String name){
        MiComputer.name=name;
    }

    @Override
    void methods() {
        System.out.println("小米电脑特有功能");
    }
}

7.MiFactory类

public class MiFactory implements ProductFactory {
    @Override
     public  AbstrPhone getPhone() {
        System.out.println("==============小米手机=================");
        return new MiPhone("小米8");
    }

    @Override
     public  AbstrComputer getComputer() {
        System.out.println("==============小米电脑=================");
        return new MiComputer("新小米电脑");
    }
}

8.MiPhone类

public class MiPhone extends AbstrPhone{

    public MiPhone(String name){
        MiPhone.name=name;
    }

    @Override
    void methods() {
        System.out.println("小米特有功能");
    }
}

9.ProductFactory接口

public interface ProductFactory {

     AbstrPhone getPhone();

    AbstrComputer getComputer();
}

 10.client类(客户端)

public class Client {
    public static void main(String[] args) {
        AbstrComputer computer = new MiFactory().getComputer();
        computer.methods();

        AbstrComputer computer1 = new HuaWeiFactory().getComputer();
        computer1.methods();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值