标签:动物 抽象工厂模式 需求 san 工厂方法 pad str sso ase
前言
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
在介绍设计模式之前需要先介绍一下面向对象的特性和UML类图。
封装、继承、多态。
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)
在UML类图中矩形框表示一个类,类分三层,第一层是;类的名称,如果是抽象类,则用斜体显示,第二层表示特性,是字段和属性,第三层表示操作,通常是方法和行为。
注意前面符号,“+”表示public,“-”表示private,“#”表示protected。
【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何具体化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类
【箭头指向】:带三角箭头的虚线,箭头指向接口
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体
【箭头及指向】:带实心菱形的实线,菱形指向整体
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
工厂模式专门负责将大量有共同接口的类实例化,工厂模式可以动态决定将哪一个类实例化,不必事先知道要实例化那一个类。
工厂模式的几种形态:
简单工厂模式:又称静态工厂方法模式。
工厂方法模式:又称多态性工厂模式。
抽象工厂模式:又称 工具箱模式。
//抽象产品角色
publicinterfaceCar{
publicvoiddrive();
}
//具体产品角色
publicclassBenzimplementsCar{
publicvoiddrive(){
System.out.println("Driving Benz ");
}
}
publicclassBmwimplementsCar{
publicvoiddrive(){
System.out.println("Driving Bmw ");
}
}
//工厂类角色
publicclassDriver{
//工厂方法.注意 返回类型为抽象产品角色
publicstaticCardriverCar(Strings)throwsException{
//判断逻辑,返回具体的产品角色给Client
if(s.equalsIgnoreCase("Benz"))
returnnewBenz();
elseif(s.equalsIgnoreCase("Bmw"))
returnnewBmw();
elsethrownewException();
}
}
策略模式
Strategy类,定义了所有的支持的算法的公共接口。
abstractclassStrategy
{
//算法方法
publicvoidAlgorithmInterface();
}
ConcreteStrategy类封装了具体的算法或行为,继承Strategy类。
publicclassConcreteStrategyAextendStrategy
{
//算法A实现方法
publicvoidAlgorithmInterface(){
//算法A实现方法
}
}
publicclassConcreteStrategyBextendStrategy{
//算法B实现方法
publicvoidAlgorithmInterface(){
//算法B实现方法
}
}
Context类,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。
publicclassContext{
Strategystrategy;
publicContext(Strategystrategy){ //初始化时,传入具体的策略对象
this.strategy=strategy;
}
//上下文接口
publicvoidContextInterface(){ //根据具体的策略对象调用其算法方法
strategy.AlgorithmInterface();
}
}
//主函数代码:
publicstaticvoidmain(String[]args){
Contextcontext;
//由于实例化不同的策略,在调用context.AlgorithmInterface();时,所获得的结果也不同。
context=newContext(newConcreteStrategyA());
context.AlgorithmInterface();
context=newContext(newConcreteStrategyB());
context.AlgorithmInterface();
}
修改Context类
publicclassContext{
Strategystrategy=null; //声明一个接口对象
publicContext(Stringtype){ //初始化时,在Context类中实现简单工厂的应用。
switch(type){
case"需求一":
Strategys1=newConcreteStrategyA();
strategy=s1;
break;
case"需求二":
Strategys2=newConcreteStrategyB();
strategy=s2;
break;
}
}
publicdoubleGetResult(){
returnstrategy..AlgorithmInterface();
}
}
//工厂模式用法
Strategys=StrategyFactory.createStrategy(type);
...=s.GetResult();
//策略与工厂结合
Contextc=Context(type);
...=c.GetResult();
策略模式是一种定义一系列算法的方法,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
优点:
简化单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试,
将一系列行为封装到一个个类中时,可以在这些行为的类中消除条件语句。
只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑运用策略模式处理这种可能性变化。
标签:动物 抽象工厂模式 需求 san 工厂方法 pad str sso ase
原文地址:https://www.cnblogs.com/to-string-hct/p/9362853.html