UML
关联关系(Association)
是类与类之间最常用的一种关系, 它是一种结构化关系,用于表示一类对象与另一类对象之间有联系。
单线实箭头,可自关联
关联关系中要表明对象间的关联关系,如是一对多还是一对一
依赖关系(Dependency)
一种使用关系,例如类A的某个方法需要类B做参数,即要使用类B的方法,用虚线表示
聚合关系(Aggregation)
表示一个整体与部分的关系,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立 存在。聚合关系用带空心菱形的直线表示。
组合关系(Composition)
也表示类之间整体和部分的关系, 但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之间具有同生共死的关系。 如必须传递某个构造器参数以初始化类,用实心菱形的直线表示。
泛化关系(Generalization)
就是继承关系,用带空心三角形的直线来表示。
实现关系(Realization)
接口与实现的关系,用带空心三角形的虚线来表示。
设计模式
对象创建型模式
面向对象设计原则
工厂方法模式
产品对象通过公共接口实现功能,抽象工厂声明工厂方法由具体子类去实现,工厂的目的是为了返回产品,抽象工厂声明的方法要返回抽象产品,每一个具体产品都对应有一个具体工厂,具体工厂返回具体产品,利用多态的性质,全程使用接口对象声明即可。
模式结构
• Product:抽象产品,产品对象的共同父类或接口
• ConcreteProduct:具体产品 ,实现了抽象产品接口
• Factory:抽象工厂,声明工厂方法,交给子类实现
• ConcreteFactory:具体工厂,实现抽象工厂中的工厂方法,返回一个具体产品类的实例
利用多态的性质,将通用方法抽象出来放在接口中,调用时更加灵活
所有的具体工厂类都具有同一抽象父类。在系统中加入新产品时,无须修改抽象工厂和抽象产品提供的接口,只要添加一个具体工厂和具体产品就可以了。这样,系统的可扩展性也就变得非常好,完全符合“开闭原则”。
public interface Log {
void writeLog();
}
public class FileLog implements Log {
@Override
public void writeLog(){
System.out.println("我是文件日志写入器");
}
}
public class DataBaseLog implements Log {
@Override
public void writeLog(){
System.out.println("我是数据库日志写入器");
}
}
public interface AbstractLogFactory {
Log createLog();
}
public class FileLogFactory implements AbstractLogFactory{
@Override
public Log createLog(){
return new FileLog();
}
}
public class DataBaseLogFactory implements AbstractLogFactory {
@Override
public Log createLog(){
return new DataBaseLog();
}
}
public class FactoryMethodPatternTest {
public static void main(String[] args){
AbstractLogFactory abstractLogFactory;
abstractLogFactory=new FileLogFactory();
abstractLogFactory.createLog().