工厂模式记录

类之间关系

  • 依赖:要是在类中用到了对方,那么他们之间就存在依赖关系
  • 泛化:特殊的依赖,就是继承
  • 实现:实现关系实际上就是 A 类实现 B 接口,他是依赖关系的特例
  • 关联:有导向性的依赖关系。单向/双向
  • 聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。

如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示:

  • 组合关系:也是整体与部分的关系,但是整体与部分不可以分开。

再看一个案例:在程序中我们定义实体:Person 与 IDCard、Head, 那么 Head 和 Person 就是 组合,IDCard 和

Person 就是聚合。

但是如果在程序中 Person 实体中定义了对 IDCard 进行级联删除,即删除 Person 时连同 IDCard 一起删除,那么 IDCard 和 Person 就是组合了.

工厂模式:

实体类

package com.xxx.backend.designmode.factorymodel;

/**
 * @program: backend
 * @description:
 * @author: 
 * @create: 2021-04-22 17:41
 **/
public abstract class Cake {


}



package com.xxx.backend.designmode.factorymodel;

/**
 * @program: backend
 * @description:
 * @author: 
 * @create: 2021-04-22 17:41
 **/
public class EggCake extends  Cake {
}


package com.xxx.backend.designmode.factorymodel;

/**
 * @program: backend
 * @description:
 * @author: 
 * @create: 2021-04-22 17:42
 **/
public class BananaCake  extends  Cake{
}
  1. 简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)

    package com.xxx.backend.designmode.factorymodel.simple;
    
    import com.xxx.backend.designmode.factorymodel.BananaCake;
    import com.xxx.backend.designmode.factorymodel.Cake;
    import com.xxx.backend.designmode.factorymodel.EggCake;
    
    /**
     * @program: backend
     * @description: 蛋糕工厂
     * @author: 
     * @create: 2021-04-22 17:04
     **/
    public class CakeFactory {
    
    
        public static Cake createCake(String type){
            Cake cake=null;
            if ("egg".equals(type)){
                cake=new EggCake();
            }else if ("banana".equals(type)){
                cake=new BananaCake();
            }else {
                System.out.println("没有该种类的蛋糕");
                return  null;
            }
            return cake;
        }
    
    
    }
  1. 工厂方法模式::对简单工厂模式的拓展,定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。
    工厂父类(用接口也可以)

    package com.xxx.backend.designmode.factorymodel.factorymethod;
    
    import com.xxx.backend.designmode.factorymodel.Cake;
    
    /**
     * @program: backend
     * @description:
     * @author: 
     * @create: 2021-04-22 18:08
     **/
    public abstract class CakeFactory {
    
         public abstract Cake create(      String type) ;
    }
    

    具体子类1

    package com.xxx.backend.designmode.factorymodel.factorymethod;
    
    import com.xxx.backend.designmode.factorymodel.BananaCake;
    import com.xxx.backend.designmode.factorymodel.Cake;
    import com.xxx.backend.designmode.factorymodel.EggCake;
    
    /**
     * @program: backend
     * @description:
     * @author: 
     * @create: 2021-04-22 18:09
     **/
    public class BeijingCakeFactory  extends  CakeFactory{
    
        @Override
        public Cake create(String type) {
            Cake cake=null;
            if ("egg".equals(type)){
                cake=new EggCake();
            }else if ("banana".equals(type)){
                cake=new BananaCake();
            }else {
                System.out.println("没有该种类的蛋糕");
                return  null;
            }
            return cake;
        }
    }
    

    工厂子类2

    package com.xxx.backend.designmode.factorymodel.factorymethod;
    
    import com.xxx.backend.designmode.factorymodel.BananaCake;
    import com.xxx.backend.designmode.factorymodel.Cake;
    import com.xxx.backend.designmode.factorymodel.EggCake;
    
    /**
     * @program: backend
     * @description:
     * @author: 
     * @create: 2021-04-22 18:09
     **/
    public class ShangHaiCakeFactory extends  CakeFactory{
    
        @Override
        public Cake create(String type) {
            Cake cake=null;
            if ("egg".equals(type)){
                cake=new EggCake();
            }else if ("banana".equals(type)){
                cake=new BananaCake();
            }else {
                System.out.println("没有该种类的蛋糕");
                return  null;
            }
            return cake;
        }
    }
    

    客户端调用类

    package com.xxx.backend.designmode.factorymodel.factorymethod;
    
    
    /**
     * @program: backend
     * @description:
     * @author: jiaokc
     * @create: 2021-04-22 17:55
     **/
    public class Client {
    
        public static void main(String[] args) {
    
            //工厂方法解决的是横向抽象
            CakeFactory cakeFactory=new BeijingCakeFactory();
            cakeFactory.create("egg");
    
    
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值