类之间关系
- 依赖:要是在类中用到了对方,那么他们之间就存在依赖关系
- 泛化:特殊的依赖,就是继承
- 实现:实现关系实际上就是 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{
}
- 简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)
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;
}
}
-
工厂方法模式::对简单工厂模式的拓展,定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。
工厂父类(用接口也可以)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"); } }